Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Kleines Pferdespiel (https://www.delphipraxis.net/145479-kleines-pferdespiel.html)

zapper54 2. Jan 2010 13:54


Kleines Pferdespiel
 
Hallo!

ich soll für meine kleine Schwester ein Pferde-spiel programmieren. Es soll möglichst simpel sein, deswegen habe ich mir gedacht, dass ersteinmal nur von rechts Barikaden hereingefahren kommen, über die man springen muss. Nun habe ich aber das Problem, dass ich die Leertaste, mit der man springen soll, nicht ansteuern kann.
Wenn sie gedrückt ist, soll nur einmal die aktion passieren und dann soll erst wieder gewartet werden, bis mein image wieder auf der position ist, die ich haben will.
Das ganze möchte ich so gestalten, dass wenn die prozedur erfüllt ist (Leertaste gedrückt) ein Timer angehen soll, der dann bestimmt, wie lange mein Pferd in der Luft bleibt.

patti 2. Jan 2010 14:00

Re: Kleines Pferdespiel
 
Und was genau ist jetzt deine Frage? :gruebel:

zapper54 2. Jan 2010 14:02

Re: Kleines Pferdespiel
 
Ich will die Leertaste ansprechen.

(Immer wenn die Leertaste gedrückt wird, wird eine Prozedur gestartet.)

Ich gebe zu, dass das da oben nicht sonderlich gut ausgedrückt war. Ich wollte euch nur einen Überblick geben...

fkerber 2. Jan 2010 14:03

Re: Kleines Pferdespiel
 
Hi!

Ich werfe einfach mal die Begriffe Delphi-Referenz durchsuchenOnKeyDown bzw. Delphi-Referenz durchsuchenOnKeyPress in den Raum ;)


Grüße, Frederic

Matze 2. Jan 2010 14:04

Re: Kleines Pferdespiel
 
Hallo,

es hat nichts direkt mit deiner Frage zu tun, aber es gibt hier ein Projekt namens Hier im Forum suchenAndorra und einige Tutorials dazu (in der Tutorialrubrik nach "Andorra" suchen). Das ist für 2D-SPiele hervoragend geeignet und dir wird viel Arbeit abgenommen. Evtl. wäre es einen Blick wert.

Grüße, Matze

Klaus01 2. Jan 2010 14:09

Re: Kleines Pferdespiel
 
.. und Delphi-Referenz durchsuchenKeyPreview der Form auf true setzen.

Grüße
Klaus

patti 2. Jan 2010 14:10

Re: Kleines Pferdespiel
 
Trotz rotem Kasten hier mal meine Antwort (weil ich mir sooo viel Mühe beim Schreiben gegeben habe ;-) ):

OK. Dafür sollte sich eigentlich das Ereignis OnKeyDown deines Formualrs eignen (Die Eigenschaft KeyPreview deiner Form sollte auf true stehen). Da kannst du dann per

Delphi-Quellcode:
if Key = VK_SPACE then TueWas;
überprüfen, ob es sich bei der gedrückten Taste um die Leertaste handelt. Hier solltest du dann irgendeine Boolean-Variable auf true setzen, damit du dir merken kannst, ob das Pferd gerade springt, denn soweit ich weiß wird das OnKeyDown-Ereignis mehrere Male aufgerufen, wenn die Taste gedrückt bleibt. Zusätzlich musst du in dem KeyDown-Ereignis also auch noch überprüfen, ob das Pferd gerade nicht springt, also ob die Boolean-Variable false ist. Wenn dies der Fall ist, lässt du das Pferd halt springen. Nach dem Springen-Lassen setzt du die Variable wieder auf false, damit das Pferd erneut springen kann.

Zusammengefasst:

Delphi-Quellcode:
var SpringtGerade : Boolean;

//im OnCreate der Form

SpringtGerade := false;


// beim OnKeyDown:
if (Key = VK_SPACE) and not(SpringtGerade) then PferdSpingenLassen;


// in PferdSpingenLassen

SpringtGerade := true
// Code für das Springen-Lassen
SpringtGerade := false;
mfg

Edit: Ein weiteres Stichwort wäre evtl. noch GetAsyncKeyState.

zapper54 3. Jan 2010 21:00

Re: Kleines Pferdespiel
 
Vielen Dank an euch alle!

Bei meiner Frage habt ihr mir echt gut geholfen. Jetzt habe ich aber ein weiteres Problem:

Mein Pferdchen ist ein Gif-Image, dass mit einem Timer auf und Abbewegt wird. Das Pferd bleibt dabei aber an der gleichen Stelle, es bewegen sich nur die Sprünge (einfache, rechteckige Images) auf das Pferd zu. Nun soll natürlich auch etwas passieren, wenn das Pferd mal gegen einen dieser Blöcke stößt. Egal ob von oben, von vorne oder von sonstwo. Daher meine Frage:

Gibt es eine Möglichkeit zu sagen, dass immer eine Aktion passiert, wenn das Pferde-Image ein Sprung-Image berührt, oder muss ich einen Haufen Koordinaten aufzählen???


Ich danke schonmal für eure Antworten.

Jetzt habe ich noch ein weiteres Problem: mein .gif (Pferd) hört beim 12. Sprung einfach auf, sich abzuspielen... gibt es da eine Möglichkeit, dass zu ändern??

zapper54 3. Jan 2010 21:56

Re: Kleines Pferdespiel
 
Bitte überseht nicht meine Frage einen Post weiter oben, aber jetzt habe ich noch ein weiteres Problem. Wie oben beschrieben bewegt sich mein Pferd nicht selber, sondern die Hindernisse bewegen sich auf mein Pferd zu. Nun habe ich das Image des Rasens, auf dem alles steh nocheinmal eingefügt, und gesagt:

procedure TForm1.Timer22Timer(Sender: TObject); --> Der Timer hat natürlich das gleiche Interval, wie die Sprünge
begin
Image3.Left:=Image3.Left-10; --> Der gleiche Abstand, indem auch die Sprünge bewegt werden.
if image3.Left=-1025 then image3.Left:=1205; --> Das Image verlässt auf der einen Seite das Spielfeld, bis es komplett nicht mehr zu sehen
end; ist und soll dann wieder zu einer Startposition zurückkehren, ander es nahtlos an das andere Image
angehängt wird.


Was habe ich da falsch gemacht :?: Die Images verschwinden einfach am linken Bildschirm.

Meine 2. Frage wäre:

Kann man irgendwie diese nervige scrollbar wegbekommen, die wenn ein sichtbares Stück ausserhalb des gezeigten Rahmens liegt angezeigt wird? Eines meiner 2 Grasstücke sitzt ja, wie oben erwähnt immer ausserhalb. Und Visible auf false zu stellen funktioniert nicht, da dann das Pferd immer über eine Weiße Fläche galloppiert. Kann man vielleicht nur Teile des Grases sichtbar machen? (Der Teil, der ausserhalb der Form ist ist unsichtbar, und nur der Teil, der innerhalb der Form ist ist sichtbar?)

Blup 4. Jan 2010 09:17

Re: Kleines Pferdespiel
 
Bitte benutze den Code-Tag, damit dein Quelltext lesbar bleibt.
Die Position -1025 wird wahrscheinlich nie genau erreicht, da sich das Image in 10er-Schritten bewegt.

Delphi-Quellcode:
procedure TForm1.Timer22Timer(Sender: TObject); --> Der Timer hat natürlich das gleiche Interval, wie die Sprünge
begin
  // --> Der gleiche Abstand, indem auch die Sprünge bewegt werden.
  Image3.Left := Image3.Left - 10;
  // --> Das Image verlässt auf der einen Seite das Spielfeld, bis es komplett nicht mehr zu sehen ist
  //     ist und soll dann wieder zu einer Startposition zurückkehren,
  //     an der es nahtlos an das andere Image angehängt wird.
  if Image3.Left <= -Image3.Width then
    Image3.Left := 1205;
end;
Scrollbars lassen sich in den Optionen des Formulars abschalten.
Eine andere Möglichkeit wäre, ein Panel auf das Formular zu legen und alle Images darauf.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:41 Uhr.
Seite 1 von 3  1 23      

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