Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Wirago

Alter Hase

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

11

26.08.2011, 20:56

ähm, naja. die update, draw was-auch-immer. methoden gehören dann zB auch in die klasse

mal so n beispiel wie es aussehen kann (is jetzt aus meinem aktuellen projekt die gegner-klasse):

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
namespace ProjektName
{
    class Enemy
    {

        public Sprite EnemySprite;
        public Vector2 gunOffset = new Vector2(25, 25);
        private Queue<Vector2> waypoints = new Queue<Vector2>();
        .
        .
        .was auch immer


        public Enemy(
            Texture2D texture,
            Vector2 location,
            Rectangle initialFrame,
            int frameCount)
        {
            EnemySprite = new Sprite(location, texture, initialFrame, Vector2.Zero);

            for (int x = 1; x < frameCount; x++)
            {
                inhalt
            }

        }

        public void AddWaypoint(Vector2 waypoint)
        {
            waypoints.Enqueue(waypoint);
        }

        public bool WaypointReached()
        {
            inhalt
        }

        public bool IsActive()
        {
                inhalt
        }

        public void Update(GameTime gameTime)
        {
                inhalt
        }


        public void Draw(SpriteBatch spriteBatch)
        {
            if (IsActive())
            {
                EnemySprite.Draw(spriteBatch);
            }
        }

    }
}

12

26.08.2011, 21:03

Also ist in deinem Bsp public Sprite EnemySprite; die Vererbung und die Klasse die du gezeigt hast deine 2te Gegner Art? Oder übersehe ich immer noch irgendwas...

Wirago

Alter Hase

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

13

26.08.2011, 21:10

nein

public Sprite EnemySprite; ist lediglich eine deklaration.
in dem fall gibt es keine vererbte klasse, weil ich bislang nur eine gegner-art geplant hab. das is also quasi die hauptklasse.

14

26.08.2011, 21:13

Ok eine Hauptklasse habe ich auch schon. Mich würde nur interessieren wie man eine zweite und somit dann weitere Gegner Arten hizufügt.

15

27.08.2011, 15:30

Ok langsam verstehe ichs aber wie sage ich dass die HP übernommen werden sollen. Muss ichd a irgendeinen bestimmten Befehl davor schreiben?

Edit: Noch eine Frage: Ich muss für den neuen Gegner Typ auch eine neue Animation erstellen oder?

16

27.08.2011, 15:43

Ich hasb jetzt so...stimmt das so wie ich es gemacht habe? Weil es kommen Fehler meldungen wie:

Fehler 3 Inkonsistenter Zugriff: Parametertyp "Shooter.Animation" ist weniger zugreifbar als Methode "Shooter.eater.Initialize(Shooter.Animation, Microsoft.Xna.Framework.Vector2)"


Liegt es daran weil ich es noch nicht im Game1.cs geschrieben hab? Ich versuche mal alles zu vervollständigen und melde mich danach nochmal ;)

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace Shooter
{
   public class eater : Enemy
    {
       public eater();
        
        
         // Animation representing the enemy
        public Animation EnemyAnimation;

        // The position of the enemy ship relative to the top left corner of thescreen
        public Vector2 Position;

        // The state of the Enemy Ship
        public bool Active;

        // The hit points of the enemy, if this goes to zero the enemy dies
        public int Health;

        // The amount of damage the enemy inflicts on the player ship
        public int Damage;

        // The amount of score the enemy will give to the player
        public int Value;

        // Get the width of the enemy ship
        public int Width 
        {
            get { return EnemyAnimation.FrameWidth; }
        }

        // Get the height of the enemy ship
        public int Height
        {
            get { return EnemyAnimation.FrameHeight; }
        }
   
        // The speed at which the enemy moves
        float enemyMoveSpeed;

        public void Initialize(Animation animation, Vector2 position)
        { 
        
        }


        public void Update(GameTime gameTime)
        {
            // The enemy always moves to the left so decrement it's xposition
            Position.X -= enemyMoveSpeed;

            // Update the position of the Animation
            EnemyAnimation.Position = Position;

            // Update Animation
            EnemyAnimation.Update(gameTime);

            // If the enemy is past the screen or its health reaches 0 then deactivateit
            if (Position.X < -Width || Health <= 0)
            {
                // By setting the Active flag to false, the game will remove this objet fromthe 
                // active game list
                Active = false;
            }
        }


        public void Draw(SpriteBatch spriteBatch)
        {
            // Draw the animation
            EnemyAnimation.Draw(spriteBatch);
        }

    
    } 
    
   
}

17

27.08.2011, 16:19

So ich denke ich habe jetzt alles hinzugefügt...aber wohl eine eigene neue Klasse erstellt ohne Vererbung...sofern das geht. Aber ich habe immernoch eine Fehlermeldung und zwar diese:
Fehler 2 "Shooter.eater" enthält keine Definition für "Add", und es konnte keine Erweiterungsmethode "Add" gefunden werden, die ein erstes Argument vom Typ "Shooter.eater" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?)

Hier der Code Ausschnitt dazu:

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private void AddEater()
        {
            // Create the animation object
            Animation EATERAnimation = new Animation();

            // Initialize the animation with the correct animation information
            EATERAnimation.Initialize(EATERTexture, Vector2.Zero, 47, 61, 8, 30, Color.White, 1f, true);

            // Randomly generate the position of the enemy
            Vector2 position = new Vector2(GraphicsDevice.Viewport.Width + EATERTexture.Width / 2, random.Next(100, GraphicsDevice.Viewport.Height - 100));

            // Create an enemy
            eater EATER = new eater();

            // Initialize the enemy
            EATER.Initialize(EATERAnimation, position);

            // Add the enemy to the active enemies list
            EATER.Add(EATER);

18

27.08.2011, 21:11

Soweit so gut es kommen keine Fehlermeldungen mehr doch nun sehe ich den neuen Gegner nicht im Spiel, also er kommt nicht..

Edit: Liegt es daran, dass ich nämlich einfach den eaters.Add(esser) Befehl rausgenommen habe?

EditEdit: Jetzt habe ich sogar eine neue List für eaters erstellt und es kommen trotzdem keine gegner von eaters...das verwirrt mich jetzt schon ganz schön :-/

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »potu1304« (27.08.2011, 21:27)


Wirago

Alter Hase

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

19

28.08.2011, 09:40

wo wird denn bei dir abgespeichert wieiviele gegner gerade aktiv sind? und vA ob sie noch am leben sind?

20

29.08.2011, 14:03

Wo soll das abgespeichert werden?

Und ichd enke trotzdem das ich es fast habe außer das immern wenn ich das Spiel debugge es startet kurz läuft aber sobald ein Gegner kommen sollte,d ass kommt:
ArgumentOutOfRangeException wurde nicht behandelt.
Der Index lag außerhalb des Bereichs. Er muss nicht negativ und kleiner als die Auflistung sein.
Parametername: index

ER markiert immer den Code ausschnitt und cihwe iß echt nicht wod er Fehler liegt :-/

C#-Quelltext

1
2
3
rectangle2 = new Rectangle((int)eaters[j].Position.X - eaters[j].Width / 2,
                        (int)eaters[j].Position.Y - eaters[j].Height / 2,
                        eaters[j].Width, eaters[j].Height);



EDIT: Also nun habe ich diese Fehlermeldung beseitigt, muss aber feststellen, dass gar keine Feinde mehr kommen :-/
Zur Info ich hab jetzt eine Basisklasse für die Enemies gemacht, welche EnemyClass.cs heißt.
Von der wollte ich nun Sachen wie Healt, Damage ableiten und daher eaters: EnemyClass und Enemy: EnemyClass geändert. Doch anscheinend stimm da was nicht mehr so ganz...wollt ihr vielleicht mal die Codes von allen 3 Klassen sehen?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »potu1304« (29.08.2011, 14:13)


Werbeanzeige