Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   Image Jump'n'Run (https://www.delphipraxis.net/207475-image-jumpnrun.html)

Carox 28. Mär 2021 23:51

Image Jump'n'Run
 
Hallo!
Ich bin neu hier und hoffe meine Frage ist an der richtigen Stelle. :hi:
Im Informatikunterricht sollen wir ein Spiel programmieren und ich habe mich für ein Jump'n'Run entschieden. Der "Run"-Part läuft auch super, nur zum springen bekomme ich mein Image (Figur) nicht! Die Figur wird derzeit mit "A" bzw. "D" von links nach rechts gesteuert und ich tüftele nebenbei noch an der Kollision mit den Hindernissen (auch Image).
Ich hoffe nun, dass mir jemand Hilfe bei der Problematik des Springens geben kann, da ich schon eine Menge Forenbeiträge gelesen hab, aber die mich alle nicht weiter bringen konnten :cry:
LG :angel:

matashen 29. Mär 2021 10:08

AW: Image Jump'n'Run
 
Hallo,

Bilder?

Code?

schon mal die CastleEngine angeschaut?

Gruß Matthias

Sinspin 29. Mär 2021 10:35

AW: Image Jump'n'Run
 
Crosspost! https://entwickler-ecke.de/viewtopic.php?t=118657

Zitat:

Zitat von matashen (Beitrag 1486245)
schon mal die CastleEngine angeschaut?

Du bist ein Scherzkeks. Informatikunterricht.

Zitat:

Zitat von Carox (Beitrag 1486236)
Die Figur wird derzeit mit "A" bzw. "D" von links nach rechts gesteuert und ich tüftele nebenbei noch an der Kollision mit den Hindernissen (auch Image).

Eins nach dem anderen würde ich sagen. Springen zuerst.
Wenn links und rechts verschieben schon geht, dann ist doch springen einfach nur wie nach oben verschieben und wieder runter fallen lassen ;-)
Meißt zeigt sich an der Stelle dass man mit einem direkten verschieben via Tasten drücken nicht weiter kommt.

Ich denke Du hast schon vom Timer gehört?
Mit Timer kommst du weiter. Wenn eine Taste gedrückt wird, merkst Du dir dass das passiert ist, verschiebst das Bild aber nicht.
Im Timer Ereignis schaust du nach eine Taste gedrückt wurde und führst die Aktion aus.
Für springen ist das TimerEvent dann mehrmals zuständig und verschiebt das Bild erst weiter nach oben und dann wieder nach unten.
Du bekommst mit einem Timer also Animationen programmiert.

hoika 29. Mär 2021 14:54

AW: Image Jump'n'Run
 
Hallo,
zeig doch erst mal,
was du schon hast.

Carox 29. Mär 2021 15:36

AW: Image Jump'n'Run
 
Erst einmal Danke für die ganzen Antworten!

Zitat:

Mit Timer kommst du weiter. Wenn eine Taste gedrückt wird, merkst Du dir dass das passiert ist, verschiebst das Bild aber nicht
Tatsächlich habe ichs auch schon mit einem Timer versucht, nur leider noch nicht hinbekommen. Soll ich den Timer durchlaufen lassen? Wenn ja, wie "merke" ich mir denn, ob eine Taste gedrückt wurde? Außerdem habe ich bis jetzt nur auf Tastendruck über FormKeyDown reagiert, kann ich auch anders abfragen, ob eine Taste gedrückt wurde?

Zitat:

Für springen ist das TimerEvent dann mehrmals zuständig und verschiebt das Bild erst weiter nach oben und dann wieder nach unten
Könnte ich damit auch realisieren, dass man beispielsweise "Leertaste" und "D" gleichzeitig drückt und damit im Sprung nach rechts steuert?

Tut mir Leid, falls die Fragen etwas unbeholfen wirken, aber ich bin echt kein Profi :oops:
Caro:angel:

Sinspin 29. Mär 2021 17:31

AW: Image Jump'n'Run
 
Zitat:

Zitat von Carox (Beitrag 1486272)
Tut mir Leid, falls die Fragen etwas unbeholfen wirken, aber ich bin echt kein Profi

Jeder von uns war mal genau da wo du jetzt bist. Ganz am Anfang ;-)

Zitat:

Zitat von Carox (Beitrag 1486272)
Soll ich den Timer durchlaufen lassen? Wenn ja, wie "merke" ich mir denn, ob eine Taste gedrückt wurde?

Klar, der läuft immer, macht aber nur dann etwas wenn er gebraucht wird.
Das brauchen des Timers legst du mit Variablen fest. Zum Beispiel in Boolean. Wenn Taste "A" gedrückt wurde dann TasteA := true.
Im Timer ist es dann wenn TasteA = true dann bewege Bild.

Zitat:

Zitat von Carox (Beitrag 1486272)
Außerdem habe ich bis jetzt nur auf Tastendruck über FormKeyDown reagiert, kann ich auch anders abfragen, ob eine Taste gedrückt wurde?

Dann nimm doch noch FormKeyUp dazu und setze TasteA := false wenn die Taste losgelassen wurde.

Zitat:

Zitat von Carox (Beitrag 1486272)
Könnte ich damit auch realisieren, dass man beispielsweise "Leertaste" und "D" gleichzeitig drückt und damit im Sprung nach rechts steuert?

Wenn man will geht alles. Wenn alle wollen würden wäre morgen Frieden auf der Erde ;-)
Aber bau erstmal den Timer ein, später kann man das ganze dann noch schöner machen.

paule32.jk 13. Aug 2024 20:41

AW: Image Jump'n'Run
 
Hallo,

vieleicht verspätet, aber vieleicht will ja jemand noch sowas machen...
Das folgende hat weniger mit Image Jump'n Run zu tun, zeigt aber Anfänger freundlich
(ich hoffe es jedenfalls), wie man bei der Spieleprogrammierung unter Windows anfängt.
Wenn man keine IDE zur Hand hat, kann man sich auf der von Microsoft angebotene MDN
(Microsoft Developer Network) Informationen anlesen, wie man unter Windows mit nativer
Art und Weise Fenster-Anwendungen programmieren kann.
Es mag sein, das dieses dann old-school wirken kann, zeigt aber was für ein Aufwand
betrieben werden muss, um kleine Programme zu programmieren.
Kleine Programme ist aber wie hier in diesen Fall erstmal zweitrangig und die IDE von EMB
kann durchaus als Übung betrachtet werden.

1. Man sollte erstmal auf DCE 12 updaten und eine Fenster-Anwendung programmieren,
die keine Komponenten enthält (auf der Spielfläche), und die das Event-
onKeyDown implementiert ist. Als einzige Komponente könnte ggf. ein TPainter
Kontroll eingefügt werden (wenn man erreichen will, das der benötigte Canvas nicht
über bestimmte hinaus im Fenster Punkte, Linien oder andere Formen zeichnet).

2. auf Grundlage von 1. kann man sich einen Canvas anlegen, auf dem ein Kreis
oder ein kleines Rechteck gezeichnet wird, das bei jedem Tastendruckcode mit
VK_LEFT oder VK_RIGHT jeweils um die selbe größe verschoben wird.

vorher sollte man sich ein Gitternetz auf den Canvas zeichnen, das dann so aus-
sieht wie ein Schachbrett bzw. wie ein karriertes Blatt Schulpapier.
Man hat dann Felder, die 20 mal 20 Pixel groß sind - also: 20 in der Länge und
20 Pixel in der Höhe.

3. Bei jedem Tastendruck muss der Canvas gelöscht werden, was man durch das über-
zeichnen eines gefüllten Rectangle bewirken kann.
Dann wird das Raster (die Gitternetzlinien) erneut auf das Canvas gezeichnet und
die Figur (der Kreis oder das Rechteck) jeweils um 20 Pixel nach links bzw. nach
rechts eingezeichnet.
Dafür sind Klassen-globale Variablen für die Position notwendigerweise zu halten,
die mit ypos und xpos benannte werden können.
Vieleicht ein kleiner Design-Tipp: benenne Variablen oder Konstanten-Namen mit einen
einfach zu merkenden Namen (denn nach einen Jahr wird man sich schwer tun, um zu
entscheiden was die Variable mit den Namen "ppx" (zum Beispiel player position x)
gemeint war. Von daher ist es eine gute Wahl, Namen wie PlayerPosX zu verwenden.

4. Nun kann man mit VK_UP oder VK_DOWN die vertikale Verschiebung programmierung, wo
dann wiederum die ypos der Figur bei VK_UP um 20 Pixel erhöht und bei VK_DOWN diw
ypos-Position um 20 Pixel verkleinert wird.

5. Die xpos und ypos Variablen müssen im gesamten Spielverlauf global (also global in
der Fensterklasse vorhanden sein, und mit einen Anfangswert (die Startposition der
Figur initializiert werden.

Wenn dann alle aufgezeigten Punkte funktionieren, kann es weiter gehen, sofern Bedarf
daran besteht.

Also dann, stay tuned...


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz