Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Schussfrequenz (https://www.delphipraxis.net/70231-schussfrequenz.html)

chaoslion 27. Mai 2006 11:05


Schussfrequenz
 
Hallo

Hab mal ne Frage bzgl. Timing. Nehmen wir mal an ich hab eine Waffe, welche eine
Animation hat. Nun gibt es 2 Wege wie man eine geregelte Schusssequenz erzeugen kann
1.
Man hat eine Variable die, wenn man die Feuertaste drückt in der Spielschleife hochgezählt
wird bis ein bestimmter Wert erreicht ist. Dann ruft man die Schussprozedur auf.
2.
Wie angesprochen hab ich eine Animation. Ich Frage nun wenn ich die Feuertaste drücke
ab, ob die Animation läuft, wenn nicht dann schieße ansonsten mache nichts.
Die Schussfrequenz hängt also von der Länge der Schussanimation ab

Meine Frage: Gibt es nicht eine andere Möglichkeit, eine genauere und per Quellcode
steuerbare Frequenz zu erzeugen?

Ratte 27. Mai 2006 11:09

Re: Schussfrequenz
 
Schau dir mal Gettickcount an. Damit kannst du die Zeit messen. Musst hlat bei jedem Schuss eine variable setzen und bei jedem Tastendruck prüfen ob die Differenz groß genug ist für einen weiteren Schuss.
mfg,
Ratte

himitsu 27. Mai 2006 11:14

Re: Schussfrequenz
 
Zitat:

Zitat von Ratte
Musst hlat bei jedem Schuss eine variable setzen und bei jedem Tastendruck prüfen ob die Differenz groß genug ist für einen weiteren Schuss.

Delphi-Quellcode:
// beim Programmstart
X := GetTickCount; // X = LongWord


// beim Tastendruck
If GetTickCount - X >= 1000{1000ms=1s} Then Begin
  Schuß;
  X := GetTickCount;
End;

eine ander Möglichkeit wäre in Timer.
Delphi-Quellcode:
//Taste wird gedrückt (dafür gibt's ja entsprechende Events)
Schuß;
Timer.Enabled := True;


//Taste wurde losgelassen
Timer.Enabled := False;


//Timer-Event
Schuß;
Bei Letztrem könnte man dann och sowas ganz leicht realisieren, wie Schuß-langePause-Schuß-kleinePause-Schuß-kleinePause...
Delphi-Quellcode:
//Taste wird gedrückt (dafür gibt's ja entsprechende Events)
Schuß;
Timer.Interval := 1500;
Timer.Enabled := True;


//Taste wurde losgelassen
Timer.Enabled := False;


//Timer-Event
Schuß;
Timer.Interval := 500;

chaoslion 27. Mai 2006 12:04

Re: Schussfrequenz
 
Hey Danke für die schnellen Antworten
Habs folgendermaßen probiert
Delphi-Quellcode:
var
  Form1: TForm1;
  x:longword;
  count:integer=0;

implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
  x := GetTickCount;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
   if GetTickCount - x >= 5000 Then
  begin
    listbox1.Items.Add('schuss '+inttostr(count));
    inc(count);
    X := GetTickCount;
  end;
end;
Aber immer wenn ich die Maus bewege, füllt er ohne Verzögerung die Listbox.. woran liegt das?

Flare 27. Mai 2006 12:19

Re: Schussfrequenz
 
Weil der für X warscheinlich den X-Wert der Maus nimmt, schlechte Vairablenüberlappung ^^
Ich wundere mich eher, warum der Compiler nicht gemeckert hat.
Und die Windows-Zeit in ms ist warscheinlich immer größer als 1024+5000 ...
Das wäre meine Idee.
Nimm einfach einen anderen Variablennamen.


Flare

chaoslion 27. Mai 2006 12:27

Re: Schussfrequenz
 
Oh mein Gott.. Schande über mein Haupt, habs echt übersehen, es lag natürlich an dem x..
Es funktioniert aber so perfekt!! danke euch


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:54 Uhr.

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