2016-04-26 8 views
0

Ich arbeite gerade an einem neuen RPG-Spiel mit Pygame (mein Ziel ist es hier wirklich zu lernen, objektorientierte Programmierung zu verwenden). Ich habe vor ein paar Tagen damit begonnen, ein Bewegungssystem zu entwickeln, bei dem der Spieler auf einen Ort klickt und das Charakter-Sprite an diesen Ort fährt und stoppt, wenn es da ist, indem es prüft, ob das Sprite mit der Maus kollidiert.Pygame: Charakterzentriertes Bewegungssystem (Diablo II wie Click-to-Move)

Ich fand jedoch schnell, dass dies die Weltgröße (auf die App-Fenstergröße) stark begrenzt.

Ich fing an, einen Blick darauf zu werfen, ein Bewegungssystem zu entwickeln, bei dem der Hintergrund sich in Bezug auf den Spieler bewegt und somit die Illusion von Bewegung erzeugt.

Ich habe dies erreicht, indem ich eine Variable erstellt habe, die meine Position in der Hintergrundkarte verfolgt. Die Karte ist viel größer als das App-Fenster. Und jedes Mal, wenn ich möchte, dass mein Spieler sich bewegt, versetze ich den Hintergrund um die Geschwindigkeit des Spielers in die entgegengesetzte Richtung.

Mein nächstes Problem ist jetzt, dass ich meinen Charakter nicht dazu bringen kann, sich zu bewegen ... weil das Zeichensprite niemals die letzte Position erreicht, die von der Maus angeklickt wird, da der Hintergrund sich bewegt, nicht das Zeichen Sprite.

Ich dachte daran, Zeit in eine Variable zu schreiben, die nachverfolgen würde, wie viele Verschiebungen das Zeichensprite benötigen würde, um die Mausklickposition zu erreichen, wenn es sich bewegen sollte. Da sich der Hintergrund mit der Geschwindigkeit des Zeichen-Sprites bewegt, würde so viel Verschiebung des Hintergrunds in den x- und y-Richtungen benötigt, um die angeklickte Position auf dem Hintergrund zu dem Zeichen-Sprite in der Mitte des Bildschirms zu zentrieren.

es so etwas wie das sein würde:

If MOUSEBUTTON clicked: 
    NM = set number of moves needed to reach the clicked position based on character sprite distance to click and character sprite speed. 
If NM != 0: 
    Move background image 
Else: 
    pass 

Dies würde bedeuten, dass, wenn mein Hintergrund genug für den Charakter Sprite jetzt nur über den Bereich des Hintergrunds bewegt hat zu sein, die ursprünglich von dem Spieler geklickt wurden, die Bewegung würde aufhören, seit NM == 0.

Ich denke, dass meine Frage ist: Klingt das wie eine gute Idee oder wird es ein Albtraum sein, die Bewegung anderer Sprites und Kollisionen zu behandeln? Und gibt es in Pygame bessere Werkzeuge, um dieses Bewegungssystem zu erreichen?

Ich könnte vielleicht auch eine Uhr verwenden und herausfinden, wie viele Sekunden die Bewegungen dauern würden.

Ich denke, dass letztendlich die ganze Herausforderung mit einem festen Bezugspunkt zu tun hat und alles um sich herum bewegt, sowohl in Bezug auf diese feste Referenz, als auch auf ihre eigene. z.B. Bewegen sich zwei andere Sprites aufeinander zu und der Charakter des Spielers bewegt sich auch, dann hängt die Bewegung der anderen beiden Sprites sowohl von der Position des anderen Sprites als auch von dem Offset des Hintergrundes ab Bewegung des Spielers Charakter.

Ein interessantes Thema, das mein Gehirn für ein paar Nächte braten hat!

Vielen Dank für Ihre Vorschläge!

Antwort

1

Sie fragen tatsächlich nach einer Meinung zum Spieldesign. So wie ich es sehe, ist nichts unmöglich, also mach weiter und probiere deine Codierung aus. Es wäre auch ratsam, sich ähnliche Projekte im Netz anzusehen. Sie können eine Menge Tipps sammeln, ohne das Rad neu zu erfinden. Hier ist ein guter Anfang.

scrolling mini map

+0

Danke für den Link werde ich einen Blick an ihm haben. Wie ich schon sagte, ich bin neu in Pygame und wollte nicht viel Zeit damit verbringen, das Rad neu zu erfinden. Zumal ich annehmen würde, dass dieses Bewegungssystem weit verbreitet ist. Allerdings scheint es so, als ob die meisten Spiele Pfeiltasten oder WASD statt Mausklick verwenden. – Sorade

+1

Werfen Sie auch einen Blick auf http://www.petercollingridge.co.uk/ – emorphus