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

11

13.09.2012, 22:03

Ich habe den Code jetzt so umgeändert damit das ganze mit enum funktionieren soll. Im Animationscode bekomme ich keine Fehlermeldung. Jedoch weiß ich nicht wie ich einen der vier enum Zustände in der Game1 Klasse als Parameter auswählen soll ?(
So versuche ich der Animationsklasse die Parameter zu übergeben. Dabei bekomme ich folgende Fehlermeldung:

C#-Quelltext

1
animations[0] = new Animation(new Rectangle[10], Content.Load<Texture2D>("kurzeanim"), TimeSpan.FromSeconds(2), Animationsablaeufe.vorwärts);

The name 'Animationsablaeufe' does not exist in the current context

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
public class Animation
{ 
private int _animIndex;
       private int _count = 0;
 
public enum Animationsablaeufe
            {
                    vorwärts, rückwärts, vorrück, rückvor
            }

public TimeSpan PassedTime { get; private set; }
       public Rectangle[] SourceRects { get; private set; }     
       public Texture2D Texture {get; private set; }
       public TimeSpan Duration { get; private set; }
       public Animationsablaeufe Ablauf { get; private set; }

        public Animation(Rectangle[] sourceRects, Texture2D texture, TimeSpan duration, Animationsablaeufe animationsablaeufe) 
       {
           int framewidth = texture.Width / sourceRects.Length;
           int frameheight = texture.Height;
            switch (animationsablaeufe)
           {
case Animationsablaeufe.vorwärts:
                    {
                        for (int i = 0; i < sourceRects.Length; i++)
                        {
                        sourceRects[i] = new Rectangle(i * framewidth, 0, framewidth, frameheight);
                        }
                        break;
                    }
case Animationsablaeufe.rückwärts:
                    {
                        for (int i = 0; i < sourceRects.Length; i++)
                        {
                        sourceRects[i] = new Rectangle((sourceRects.Length - 1 - i) * framewidth, 0, framewidth, frameheight);
                        }
                            break;
                    }
 case Animationsablaeufe.vorrück:
{
for (int i = 0; i < sourceRects.Length; i++)
                        {
                        _count += 1;
                        if (_count < sourceRects.Length + 1)
                        {
                          sourceRects[i] = new Rectangle(i * framewidth, 0, framewidth, frameheight); 
                        }
                        else
                    {
                        sourceRects[i] = new Rectangle((sourceRects.Length - 1 - i) * framewidth, 0, framewidth, frameheight);
                        if (i == sourceRects.Length - 1)
                            _count = 0;
                    }
                        }
                     break;
                    }
case Animationsablaeufe.rückvor:
{
for (int i = 0; i < sourceRects.Length; i++)
                        {
                        _count += 1;
                        if (_count < sourceRects.Length + 1)
                        {
                        sourceRects[i] = new Rectangle((sourceRects.Length - 1 - i) * framewidth, 0, framewidth, frameheight); 
                        }
                        else
                    {
                        sourceRects[i] = new Rectangle(i * framewidth, 0, framewidth, frameheight);
                        if (i == sourceRects.Length - 1)
                            _count = 0;
                    }
                        }
                        break;
                    }
} 
SourceRects = sourceRects;
Texture = texture;
       Duration = duration;
       Ablauf = animationsablaeufe;
}


drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

12

13.09.2012, 23:07

C#-Quelltext

1
animations[0] = new Animation(new Rectangle[10], Content.Load<Texture2D>("kurzeanim"), TimeSpan.FromSeconds(2), Animation.Animationsablaeufe.vorwärts);

13

14.09.2012, 10:21

Ich habe leider immer noch Probleme mit den beiden enum Zuständen vorrück und rückvor :(
Bei vorrück läuft die Animation nur rückwärts ab(anstatt zuerst vorwärts, dann rückwärts).
Bei rückvor läuft die Animation nur vorwärts ab(anstatt zuerst rückwärts, dann vorwärts).
Ich verstehe aber nicht was an dem Code falsch sein soll. Zuerst(wenn z = 0) soll eine for Schleife durchlaufen werden, und wenn z = 1 ist soll die andere for Schleife durchlaufen werden. Ich verstehe auch nicht warum die Animationen bei der zweiten for Schleife(z=1) beginnen, obwohl z beim ersten Durchlauf 0 beträgt.

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
case Animationsablaeufe.vorrück:
                    {
                        for (int z = 0; z < 2; z++)
                        {
                        if (z == 0)
                    {
                        for (int i = 0; i < sourceRects.Length; i++)
                        {
                        sourceRects[i] = new Rectangle(i * framewidth, 0, framewidth, frameheight);
                        }
                    }
                        if (z == 1)
                        {
                        for (int i = 0; i < sourceRects.Length; i++)
                        {
                        sourceRects[i] = new Rectangle((sourceRects.Length - 1 - i) * framewidth, 0, framewidth, frameheight);
                        }
                        }
                        }
                        break;
                    }
                    case Animationsablaeufe.rückvor:
                    {
                        for (int z = 0; z < 2; z++)
                        {
                        if (z == 0)
                        {
                            for (int i = 0; i < sourceRects.Length; i++)
                            {
                                sourceRects[i] = new Rectangle((sourceRects.Length - 1 - i) * framewidth, 0, framewidth, frameheight); 
                            }
                        }
                            if (z == 1)
                            {
                                for (int i = 0; i < sourceRects.Length; i++)
                                {
sourceRects[i] = new Rectangle(i * framewidth, 0, framewidth, frameheight);
                                }
                            }
                        }
                        break;
                    }


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

14

14.09.2012, 11:53

Debugger.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

15

14.09.2012, 11:58

Ich habe einen Breakpoint gesetzt und z ist am Anfang 0. Also müsste das ganze doch richtig ablaufen ?(

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

16

14.09.2012, 12:01

Jap. Das ist ein super Punkt an dem du dich mit dem Debugger auseinander setzen kannst. Einfach mal gucken, was an welcher Stelle in den Schleifen wo eingefügt wird und was du da genau machst. Dafür kannst du einfach mal bei Google oder hier im Forum suchen. Du setzt einfach einen Breakpoint vor die Schleifen und gehst dann Schritt für Schritt den Code durch und guckst was sich geändert hat, oder du setzt einen Breakpoint in die Schleife und der Debugger hält für dich von selbst in jedem Schritt der Schleife an.
Ein weiterer Tipp, die for-Schleife mit 'z' sowie das folgende if sind unsinnig. Du kannst die beiden Schleifen ja einfach direkt nacheinander ausführen. Einfach erst die erste Schleife und dann die zweite ausführen. Das sollte den Code noch etwas übersichtlicher machen.

edit:
Nicht z ist wichtig. Setz mal Breakpoint in die inneren Schleifen und guck was da genau passiert. Zuerst was in der z==0 Schleife passiert und dann was in der z==1 Schleife abläuft und welche Werte geändert werden.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

17

17.09.2012, 10:01

Schorsch hat ja ziemlich gut beschrieben, wie du vorgehen kannst

aber noch etwas anderes:
bitte achte auf die formatierung deines Codes
der erste (und relevante) Abschnitt ist derzeit relativ schwierig zu lesen
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Werbeanzeige