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

De_Struktor

unregistriert

41

06.03.2013, 16:43

wärt ihr denn so nett ein beispiel zu bringen, wie ihr ressource in der unloadcontent methode entladet.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

42

06.03.2013, 16:45

Lern doch endlich Dich der Dokumentation zu stellen. XNA ist kein undokumentiertes System und auch keins ohne Beispiele.
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]

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

43

06.03.2013, 16:49

Die Frage ist unsinnig. Ressourcen die von XNA verwaltet werden, werden von XNA schon automatisch entladen. Die Methode ist dafür da unmanaged Ressourcen selbst zu entladen. Bist du einer der "Ich gucke mir seit ner Woche C# an und jetzt kommt XNA" Fälle? ;)
„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.“

De_Struktor

unregistriert

44

11.03.2013, 19:12

lieber community, ein letzter ruf an dich^^ ich habe die animation von 2 bildern nach rechts hinbekommen, das läuft soweit.


C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (Keyboard.GetState().IsKeyUp(Keys.D))
            {
                block5 = false;
            }
            else if (Keyboard.GetState().IsKeyDown(Keys.D))
            {
                if (!block5)
                {
                    block5 = true;
                    spriteBatch.Draw(allPic[1], allPic_rect[1], Color.White);
                    allPic_rect[0] = allPic_rect[1];
                    allPic_rect[1].X++;
                }
            }


// Das läuft prima soweit, jetzt will ich zwar genau das gleiche mit den Bildern die nach links gehen machen, aber ich habe ja wie im quellcode allPic_rect[1] den allPic_rect[1] hinzugewiesen, heisst, er nimmt bei der
bewegung quasi beide bilder mit, jedoch ist das mit den bildern die sich nach links bewegen sollen, nicht so möglich, denn dann müsste es ja heißen, laut quellcode:
"allPic_rect[0] = allPic_rect[1] = allPic_rect[2] = allPic_rect[3];
und das wäre ziemlich suboptimal.
deswegen meine frage an euch, wie könnte ich es hinbekommen, das alle Bilder sozusagen ein GesamtFrame ergeben, sodass, wenn ich A drücke, die Bildanimation nach links verläuft und wenn ich D drücke, die Bildanimation nach rechts läuft. denn sobald z.b A gedrückt wird, muss die rechtsanimation quasi "versteckt" werden.
ihr wisst schon, wenn ich in Pokemon nach rechts gemacht habe, dann waren die anderen Bilder ja weg, wenn ich links gedrückt habe, dann waren die rechtsbilder weg und nur die linksanimation war dann zusehen. Ich hoffe, ich habe mich ansatzweise verständlich ausgedrückt^^.

allPic_rect[] sind die rectangle-arrays
[2] und [3] sind die nach links laufenden bilder...
[0] und [1] sind die nach rechtslaufenden bilder...
»De_Struktor« hat folgende Bilder angehängt:
  • r-rechterfuß.png
  • animation_rechts.png.png
  • Linkeansicht.png
  • l-linkerfuß.png

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »De_Struktor« (12.03.2013, 12:09)


Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

45

12.03.2013, 13:43

Ich versteh nicht was dein allPic_rect soll? Dein Objekt hat doch im Prinzip "eine" Position und normalerweise auch nur "eine" Größe. Wenn die natürlich bei deinen einzelnen Bildern der Animation unterschiedlich sein sollte, muss man da noch mal anders gucken, aber in deinen Beispiel sind die Bilder ja alle gleich groß. Was im Prinzip wichtig ist, ist dass du verschiedene Animationen hier hast. Du musst also überlegen wie du eine einzelne Animation darstellen kannst. Dafür könnte man die einzelnen Bilder in einem Array oder eine Liste speichern:

C#-Quelltext

1
List<Texture2D> animation;

In der Liste sind die Bilder in Reihe, welche zur Animation gehören. Wenn du jetzt mehrere Animationen haben möchtest, kannst du dir eine Liste von diesen Listen machen:

C#-Quelltext

1
List< List<Texture2D> > animations;

Jetzt hast du eine Liste von Animationen. Wenn du nun eine Animation raussuchen möchtest, musst du nur noch den Index zur Animation kennen. Nun schöner wäre es ja eigentlich, wenn du statt eines Index einen String als Bezeichner angeben könntest. Also machen wir aus der Liste ein Dictionary:

C#-Quelltext

1
Dictionary< String, List<Texture2D> > animations;

Dadurch hast du jetzt ein sehr einfaches Konzept. Jetzt gibt es einen String welchen du dir für die aktuelle Animation speichern musst, sowie einen Index für das aktuelle Bild der Animation. Schöner wäre es ja noch wenn du das alles irgendwie wegkapseln könntest und dadurch deinen eigentlichen Code etwas schlanker halten könntest. Man kann anfangen eine Klasse für eine Animation zu erstellen. Diese hat intern dann die Liste der einzelnen Bilder. Jetzt kannst du der Klasse Funktionen wie Play, Pause, Reset geben. Weiterhin kannst du aber noch mehrere Funktionen einbauen. Über Properties könntest du steuern, ob die Animation loopen soll. Das heißt, wenn sie durchgelaufen ist, fängt sie wieder von vorne an. Manche Animationen sollen am Ende einfach stehenbleiben. Andere sollen von vorne nach hinten und wieder nach vorne abspielen. Das wird oft als Ping Pong bezeichnet. Sowas könnte man, wenn es gewollt ist, alles in dieser Klasse unterbringen, ohne seinen eigentlichen Spielcode weiter aufzublähen.
Als nächsten Schritt könnte man auch das Dictionary dieser Animationen kapseln. Diese Klasse würde sich dann die aktuelle Animation merken, zusätzlich Funktionen haben um eine andere Animation auszuwählen, Funktionen wie Play, Pause etc an die aktuelle Animation weiterleiten und was einem noch so alles einfällt.

Dazu ist dies hier vielleicht ganz interessant. Wichtig ist, achte oben auf die Zahlen. Das ganze besteht aus 3 Teilen. Im ersten Teil geht es um einen Texturatlas, was sicherlich ganz interessant zu kennen ist. Im zweiten geht es um eine einfache Animationsklasse und im dritten Teil geht es dann darum wie man die Klasse benutzt. Vielleicht kannst du dir da ja was abgucken.
„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.“

Werbeanzeige