Alle 2 Sekunden schießen
Übersicht

DarthshootBetreff: Alle 2 Sekunden schießen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo!
Ich finde die Lösung mit Schleifen ziemlich blöd für das was ich vorhabe... will nämlich einen Gegner konstruieren, der alle 2 Sekunden einen Schuss abgibt. Wie kann ich (wenn überhaupt möglich) mit einem Timer arbeiten? Hab in der Onlinehilfe nichts richtiges gefunden :/ Danke im Voraus. MfG Darthshoot |
||
FWeinbehemals "ich" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Du must dir mit desbefehles Millisecs die seit in einer Variable speichern
und dann wenn du den gegner schißen lassen wilst also bei dir 2 Sekunden(2000 Millisekunden) abfragen also so Code: [AUSKLAPPEN] alt=MilliSecs();das ist die Varibale die die sytemzeit enthält in Millisekunden While Not KeyHit(1);Schleife starten If alt=MilliSecs()-2000 Then ;abfragen ob 2 sec rumm sind Print "hallo ";eigentlich muss hier dein Code stehen alt=MilliSecs() EndIf Wend |
||
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs |
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich hat Folgendes geschrieben: Du must dir mit desbefehles Millisecs die seit in einer Variable speichern
und dann wenn du den gegner schißen lassen wilst also bei dir 2 Sekunden(2000 Millisekunden) abfragen also so Code: [AUSKLAPPEN] alt=MilliSecs();das ist die Varibale die die sytemzeit enthält in Millisekunden While Not KeyHit(1);Schleife starten If alt=MilliSecs()-2000 Then ;abfragen ob 2 sec rumm sind Print "hallo ";eigentlich muss hier dein Code stehen alt=MilliSecs() EndIf Wend für If alt=MilliSecs()-2000 Then ;abfragen ob 2 sec rumm sind würde ich eher If alt<=MilliSecs()-2000 nehmen, da der Computer die Schleife ja sonst mindestens 1000 mal in der Sekunde durchlaufen müsste, damit es immer Funktioniert. Gruß, Smily0412 |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
Darthshoot |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hmm irgendwie zählt er einmal bis zwei Sekunden (seh ich, weil das Game langsamer wird) und dann passiert garnichts:
Code: [AUSKLAPPEN] ; Schießen
Function Gegner1_5() For a.TGegner1 = Each TGegner1 If Warte = MilliSecs() - 2000 Then Gegner1Schuss1(a\X, a\Y) Gegner1Schuss2() Gegner1Schuss3() Gegner1Schuss4() Warte = MilliSecs() EndIf Next End Function Über der Bufferschleife habe ich noch "Global Warte = MilliSecs()". Was ist falsch? |
||
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
in deiner schleife seht: warte = millisecs()
d.h. bei jedem durchlauf auf millisecs() gesetzt bedeutet wenn er -2000 recnet kommt er niemals da an wo er soll ![]() |
||
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nightphoenix das warte=millisecs() ist in dem IF-befehl und wird daher nur alle 2 sek ausgeführt (strukturiert doch mal eure Programme etwas besser)
Darthshoot sieh mal meinen Post etwas weiter oben ![]() |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
Darthshoot |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Er macht auch mit <= nichts. ![]() |
||
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
versuchs mal so:
Code: [AUSKLAPPEN] Function Gegner1_5()
If Warte = MilliSecs() - 2000 Then For a.TGegner1 = Each TGegner1 Gegner1Schuss1(a\X, a\Y) Gegner1Schuss2() Gegner1Schuss3() Gegner1Schuss4() Warte = MilliSecs() Next EndIf End Function Edit: Oder poste mal den Ganzen Code plz. |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
Darthshoot |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Jetzt feuert der erste NPC und die anderen nicht, alle 2 Sec einen Schuss, der nach ein paar Pixeln sich in nichts auflößt oO
Das ist der ganze Code, aber eigendlich reicht die von mir oben gepostete Function: Code: [AUSKLAPPEN] Global Gegner1Image = LoadImage("Images/Gegner1.bmp")
Global Gegner1SchussImage = LoadImage("Images/Gegner1Schuss.bmp") MaskImage Gegner1Image, 255, 0, 255 Global Warte = MilliSecs() ; Gegner1 Type TGegner1 Field X#, Y#, Winkel# End Type ; Position Function Gegner1_1(X, Y, Winkel) a.TGegner1 = New TGegner1 a\X = X a\Y = Y a\Winkel = Winkel End Function ; Position berechnen Function Gegner1_2() For a.TGegner1 = Each TGegner1 a\X = a\X - 3 a\Y = a\Y + a\Winkel If a\X < -50 Then Delete a Next End Function ; Rendern Function Gegner1_3() For a.TGegner1 = Each TGegner1 DrawImage Gegner1Image, a\X, a\Y Next End Function ; Kollision Function Gegner1_4() For a.TGegner1 = Each TGegner1 If ImagesCollide (PlayerImage, XPlayer, YPlayer, 0, Gegner1Image, a\X, a\Y, 0) Then Highscore = Highscore + 50 Leben = Leben - 1 Delete a EndIf For b.TStandartGun = Each TStandartGun If ImagesCollide (StandartGunImage, b\X, b\Y, 0, Gegner1Image, a\X, a\Y, 0) Then Highscore = Highscore + 100 Delete b Death = 1 EndIf Next If Death = 1 Then Delete a Death = 0 EndIf Next End Function ; Schießen Function Gegner1_5() If Warte <= MilliSecs() - 2000 Then For a.TGegner1 = Each TGegner1 Gegner1Schuss1(a\X, a\Y) Gegner1Schuss2() Gegner1Schuss3() Gegner1Schuss4() Next Warte = MilliSecs() EndIf End Function ; Waffe von Gegner1 Type TGegner1Schuss Field X#, Y# End Type ; Position Function Gegner1Schuss1(X, Y) a.TGegner1Schuss = New TGegner1Schuss a\X = X a\Y = Y End Function ; Position berechnen Function Gegner1Schuss2() For a.TGegner1Schuss = Each TGegner1Schuss a\X = a\X - 10 If a\X < 0 Then Delete a Next End Function ; Rendern Function Gegner1Schuss3() For a.TGegner1Schuss = Each TGegner1Schuss DrawImage Gegner1SchussImage, a\X, a\Y Next End Function ; Kollision Function Gegner1Schuss4() For b.TGegner1Schuss = Each TGegner1Schuss If ImagesCollide (Gegner1SchussImage, b\X, b\Y, 0, PlayerImage, XPlayer, YPlayer, 0) Then Leben = Leben - 1 Delete b EndIf Next End Function |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group