Autor Beitrag
Elayla
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: So 08.06.03 12:17 
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:

ausblenden 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):

ausblenden 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 user profile icontommie-lie: Quote- durch Delphi-Tags ersetzt
Elayla Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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.))

_________________
MFG
Michael Springwald, "kann kein englisch...."
Elayla Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Mo 09.06.03 17:18 
lösung:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
  var
     keys: array[0..255of bool;
  onKeyDown:
  kesy[key] = True,

  onKeyUp:
  Keys[key]:=False

_________________
MFG
Michael Springwald, "kann kein englisch...."
Elayla Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: Mo 09.06.03 20:31 
Er meint wahrscheinlich das du dann in deinem Timer abfragst mit

ausblenden Delphi-Quelltext
1:
if keys[keynummer] then ...					


und da dann die Reaktionen machst.

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.