2016-04-16 9 views
0

Ich habe ein Sprite-Blatt, das einen Charakter-Walk-Zyklus enthält, und ich habe eine Spieler-Klasse erstellt, die es dem Spieler erlaubt, sich durch die Walk-Animation zu bewegen, aber die Animation läuft nur nach rechts. Mit den Pfeiltasten bewege ich mich nach oben, unten, links und rechts, dh wenn ich eine beliebige Taste drücke, bewegt sich mein Player in die richtige Richtung, führt aber nur die Animation des Gehens nach rechts aus.Monogame - Sprite-Klasse

Die aktuelle Animation, wie dies in der LoadContent() Funktion arbeitet, wurde genannt:

spritesheet = Content.Load<Texture2D>("sprites2"); 

player = new Player(spritesheet, new Rectangle(0, 96, 32, 48), 
new Vector2(100, 100), 4); 

Dies macht seinen Job, wie es jeweils 4 Sprites ruft die Wander Animation nach rechts zu vollenden, und new Rectangle(0,96,32,48) ist der Ort, der aus dem Sprite Sheet herausgeschnitten wurde. Allerdings brauche ich zum Beispiel (new Rectangle(30, 101, 65, 52)) auch, die meinen Charakter korrekt animiert, wenn die linke Pfeiltaste gedrückt wurde.

Meine Frage ist, wie würde ich eine andere Stelle des Sprite-Blattes geladen bekommen, und dann tatsächlich funktionieren, wenn ich die richtige Taste drücke?

Dies ist eine sehr schwierige Frage zu stellen, und ich entschuldige mich sehr, wenn es schwer zu verstehen war. Ich akzeptiere alle Änderungen an meiner Frage und danke Ihnen im Voraus.

Antwort

1

Ich denke, ein besserer Weg wäre, das gesamte Sprite-Blatt (oder den gesamten Abschnitt des Sprite-Blattes, das das Sprite des Spielers enthält) an die Player Klasse zu übergeben und eine separate Animationsklasse zu haben, wie man Rechtecke aus dem Blatt auswählt . Dies ist einfacher, wenn Sie Frames haben, die alle die gleiche Größe haben, aber es ist machbar, wenn Sie nicht haben.

In der Animationsklasse können Sie eine List<Rectangle> für jede Animation einrichten, MoveUp, MoveDown, MoveLeft, MoveRight usw. und dann ein Verfahren PlayAnimation() von Ihrem Player Klasse aufrufen, wenn Ihr Spieler eine dieser Aktionen auszuführen.

Wenn Sie für jeden Frame mehr Informationen benötigen, als nur anzeigen, welche Rectangle angezeigt werden sollen (z. B. wenn Frames unterschiedliche Zeiten haben), können Sie eine Frame-Klasse erstellen, die diese Informationen enthält.