Entwickler-Ecke
Multimedia / Grafik - Ruckeln bei Tastaturabfrage
Elayla - So 08.06.03 12:17
Titel: Ruckeln bei Tastaturabfrage
Hi ich hab ein kleines Problem.
Ich habe gerade angefangen mich bissl in DelphiX einzuarbeiten.
Dazu möchte ich ein kleines Shooter-Spiel programmieren, ein Raumschiff das halt Gegner abschiessen kann.
Die Steuerung des Schiffes bewerkstellige ich über DXInput und das funktioniert auch fehlerfrei, jetzt möchte ich aber noch schiessen können.
Dafür habe ich zuerst onkeydown benutzt und die Taste auf Control gelegt, aber immer wenn ich schiesse bleibt das Schiff solange stehen bis der Schuss (wie ich es haben wollte) von der Karte verschwunden ist.
Dann habe ich zu Testzwecken weil ich nur isUp,isRight,isDown,isLeft kenne schiessen zusätzlich auf isLeft gelegt, aber hier bleibt das Schiff nach'm schiessen stehen und lässt sich nicht mehr bewegen :cry:
Hier die Prozedur zum bewegen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer); begin DXDraw1.Surface.Fill(0); DXInput1.Update;
If isUp in Form1.DXInput1.States Then strave := strave -10;
If isDown in Form1.DXInput1.States Then strave := strave + 10;
If isLeft in Form1.DXInput1.States Then begin up := up -10; DXTimer2.Enabled:=true; end;
If isRight in Form1.DXInput1.States Then up := up +10;
IF up<=-100 Then up:=688; If up>=788 Then up:=-100; If strave<=-100 Then strave:=453; If strave>=553 Then strave:=-100; DXImageList1.Items[0].Draw(DXDraw1.Surface,up,strave,0); DXDraw1.Flip; end; |
Und hier die zum schiessen (mit DXInput auf isLeft):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm1.DXTimer2Timer(Sender: TObject; LagCount: Integer); begin DXInput1.Update; If isLeft in Form1.DXInput1.States Then begin upfire:=up+25; stravefire:=strave; repeat DXDraw1.Surface.Fill(0); stravefire:=stravefire - 5; DXImageList1.Items[0].Draw(DXDraw1.Surface,up,strave,0); DXImageList1.Items[1].Draw(DXDraw1.Surface,upfire,stravefire,0); DXDraw1.Flip; until stravefire = - 20; DXTimer2.Enabled:=false; end; end; |
Was muss ich anders machen, wo liegt mein Fehler?
(Bin neu und hab 0 Ahnung von DelphiX :wink: )
Ich hoffe ihr könnt mir behilflich sein :)
P.S. Nicht wundern, ich habe up und strave verwechselt ^^
Moderiert von
tommie-lie: Quote- durch Delphi-Tags ersetzt
Elayla - Mo 09.06.03 00:51
Ich habs nochmal anders versucht und das mit in die DXTimer1-Komponente eingebaut, aber das geht immernoch nicht.
Welche Möglichkeiten gibt es den Prozess des Schusses neben der Tastaturabfrage und demzufolge der Steuerung des Schiffes laufen zu lassen.
Es geht weder wenn ich den Prozess (mit Repeat Until) in der gleichen Timer-Komponente mache, noch es auf eine zweite auslagere, wenn ich schiessen auf onKeyDown mache schiesst er und es dauert eine Weile bis ich das Schiff wieder bewegen kann, also die Möglichkeit ist auch ausgeschlossen :cry:
mimi - Mo 09.06.03 17:12
du hast mind einmal 2 DXtimter laufen, soge dafür das nur einer läuft und es sollte gehen.
ich habe noch nie dxInput genutzt(bzw. einmal und von da an mag ich es nicht.))
Elayla - Mo 09.06.03 17:15
Naja mir fällt keine gute Alternative ein, mit onkeydown geht ja nur immer eine tastaturabfrage, also kann man nicht schräg fliegen wenn man 2 tasten drückt und fliegen und gleichzeitig schiessen hata uch nicht funktioniert :?
mimi - Mo 09.06.03 17:18
lösung:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| var keys: array[0..255] of bool; onKeyDown: kesy[key] = True,
onKeyUp: Keys[key]:=False |
Elayla - Mo 09.06.03 17:41
Kannst du mir da mal ein kleines Beispiel schreiben?
Ich versteh das irgendwie nicht so richtig wie ich das einbinden muss :(
Tweafis - Mo 09.06.03 20:31
Er meint wahrscheinlich das du dann in deinem Timer abfragst mit
Delphi-Quelltext
1:
| if keys[keynummer] then ... |
und da dann die Reaktionen machst.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!