Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi 2D Game (https://www.delphipraxis.net/109474-2d-game.html)

Maltimore 2. Mär 2008 11:39


2D Game
 
Hey!

Ich bin ein ganz neuer Programmierer, habe jetzt seit einem halben Jahr Informatik, aber leider nicht sooo die Ahnung.
Bei DP (dass das Delphi Praxis heißt hab ich jetz schon rausgefunden) bin ich ganz neu, daher kannes auch sein, dass ich jetz in der falschen Kategorie poste oder so.
Also. Ich habe vor ein Jump and Run Spiel zu programmieren. Ein Anfang ist getan, ich habe per Paint meine Männchen gemalt für nach links/rechts gehen, bücken und springen. Diese habe ich als image eingebunden. Jetzt kann sich das Männchen schon bewegen in alle Richtungen außer nach unten (das soll es auch nicht können, ich verschiebe einfach das image.
Ich habe nun folgendes Problem. wenn man das Männchen nach links bewegt (also 'a' drückt) und währenddessen plötzlich nach rechts geht (also 'd' drückt, ohne a loszulassen) springt es wieder an die Position, von der es gestartet ist. Meine erste Frage zu dem Projekt ist also:

Wie kann ich verhindern, dass zwei Tasten gleichzeitig abgehandelt werden? (Also im eben beschrieben Fall hätte ich es dann gerne, dass sich das Männchen daraufhin nach rechts in Bewegung setzt.)

Vielen Dank im Voraus,

Maltimore

rawsoul 2. Mär 2008 11:52

Re: 2D Game
 
Willkommen in der DP :dp:

Ich denke, du hast die richtige Kategorie erwischt ;)

Eine Möglichkeit wäre es, beim OnKeyDown Event eine bool'sche (Schreibt man das so?) Variable auf z.B. true zu setzen, und beim OnKeyUp wieder auf false. Ist diese Variable true, wird deine Tastaturverarbeitung einfach übersprungen (z.B. 'if tasteGedrueckt then exit;').

Allerdings würde ich allgemein behaupten, dass man das Problem auch anders lösen kann, anstatt dem Endnutzer Tastatureingaben zu verbieten ;)

Maltimore 2. Mär 2008 12:07

Re: 2D Game
 
also um ehrlich zu sein hab ichs jetz nicht ganz kapiert. :wiejetzt: also ich will ja das wenn ich d gedrückt halte (also das männchen nach rechts geht) und dann a drücke (ohne d loszulassen ganz wichtig) von dem moment an d ignoriert wird und ausgeführt wird (also bewegung nach links. das klappt theoretisch ja auch, nur springt das männchen halt wieder an die position, von der es gestartet ist. was du jetzt meinst ist glaub ich das nicht d, sondern a ignoriert wird oder?

dominikkv 2. Mär 2008 12:26

Re: 2D Game
 
Es gibt mehrere Möglichkeiten ein Image per Tastendruck zu bewegen, darum wäre es gut zu wissen wie du das anstellst.
Zeig einfach mal deine Prozedur in der du das Image verschiebst.

Larsi 2. Mär 2008 12:49

Re: 2D Game
 
Also du könntest ja einfach eine Variable wie z.B.: i vom Typ integer deklarieren un dann wenn du das Ereignis für d machst wird dann i auf0 gesetzt und wenn man auf a klcikt hal tumgekehrt. In die a Prozedur schreibste dann sowas rein wie z. B. if i := 0 then klcike a sonst nicht!
Codetechnisch müsstest du das i: integer und das Form1: Tform oder wie das heißt schreiben!

Maltimore 2. Mär 2008 13:33

Re: 2D Game
 
ok, aber macht euch auf was gefasst, der code ist echt schlimm :D

Delphi-Quellcode:

procedure linksgehen;
begin
imagesverstecken; //von mir gemachte procedure, hidet erstmal alle images (sind inzwischen 9)
Richtungrechts := false; // sagt anderen proceduren, dass sich nach links bewegt wird
 if nr = 1 then begin   // die nummern sind dazu da dass sich 2 images beim angezeigt werden abwechseln damits besser aussieht
         form1.image4.left := form1.image1.left -20;
         form1.image1.Left := form1.image4.left;
         form1.image4.show; // hier wird es dann angezeigt
         nr := nr +1; // damit beim nächsten durchlauf der else zweig abgearbeitet wird (ich weiß bool würde reichen)
      end else begin
          form1.image3.left := form1.image1.left - 20;
          form1.image1.Left := form1.image3.left;
          form1.image3.show;
          nr := nr - 1;
      end;
end;
das war die procedure linksgehen, die von onkeypress aufgerufen wird:


Delphi-Quellcode:

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); // hab keinen plan was es mit sender: tobject auf sich hat
begin
if key = 'a' then begin // ich weiß begin - end eigentlich irrelevant hier aber man weiß ja nie :)
linksgehen;
end;

if key = 'd' then begin
rechtsgehen;
end;

if key = 's' then begin // da bückt sich die figur
runtergehen;
end;

if key = ' ' then begin // naja das springen ist noch nicht ganz ausgereift, wollte es eig. nach physikalischen gesetzen springen lassen aber
                         // habe mich nun dagegen entschieden, weil zu schwer
springen;
end;
end;
joa.. ich erklärs euch gerne noch genauer, frag einfach :)

xZise 2. Mär 2008 14:07

Re: 2D Game
 
Okay... Es wäre nett zu wissen, was die Images sind?
Also was ist "Image1", "Image3" und "Image4"?

MfG
xZise

Maltimore 2. Mär 2008 14:30

Re: 2D Game
 
ääh, also ist doch relativ egal oder? das sind halt paint bilder :D
ich weiß nicht genau, worauf du hinauswillst. 3 und 4 sind zwei bilder, die eine figur in der bewegung nach links zeigen und 1 ist ein image das eine figur in der bewegung nach rechts zeigt.
image 1 führe ich halt immer mit dem aktuell bewegten image mit, und egal in welcher prozedur ich bin kann ich mich darauf verlassen, dass image1 mir die korrekte position des aufenthaltsorts gibt. (naja gut, das muss ich allerdings jetza auch wieder überarbeiten weil ja jetz das springen und damit die y koordinate dazukommt.. -.-)

xZise 2. Mär 2008 15:03

Re: 2D Game
 
Zitat:

Zitat von Maltimore
ääh, also ist doch relativ egal oder? das sind halt paint bilder :D

  1. Nein ist es nicht! s.u.
  2. Wohl kaum ;) Eher TImages (!= "Paintbilder")

Ich würde es einfach so machen, dass du zwei Integer hast, in der die Person des Spieler steht ;)

Weil wenn du z.B. Nach links gehst und "nr" eins ist, und du dann nach rechst geht, dann wird der das zweite "Rechtsbild" wahrscheinlich nehmen => Das nimmst du nicht mit.
Deshalb ist es auch wichtig was die Bilder bedeuten, damit ich weiß, dass du das TImage für die Bewegung nach rechts mitnimmst.

Ich würde einfach "PlayerSpeedX" als Integer einführen, und damit dann arbeiten ;)

MfG
xZise

dominikkv 2. Mär 2008 15:17

Re: 2D Game
 
Ich würde eh nicht mit dem OnKeyPress-Ereignis arbeiten da
1) das Ereinis am Anfang einmal aufgerufen wird, dann Pause, dann mermals hintereinander
2) die Frequenz, mit der das Ereingins hintereinander aufgerufen wird, umstellbar ist und somit von PC zu PC unterschiedlich sein kann.

Wie wäre es mit einem Timer mit dem du den jeweiligen Tastenstatus abfrägst?


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:54 Uhr.
Seite 1 von 2  1 2      

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