Alle 2 Sekunden schießen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Darthshoot

Betreff: Alle 2 Sekunden schießen

BeitragMo, Jan 01, 2007 11:40
Antworten mit Zitat
Benutzer-Profile anzeigen
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
 

FWeinb

ehemals "ich"

BeitragMo, Jan 01, 2007 13:30
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jan 01, 2007 13:41
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jan 01, 2007 13:47
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jan 01, 2007 13:52
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink

Smily

BeitragMo, Jan 01, 2007 13:58
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink
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

BeitragMo, Jan 01, 2007 14:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Er macht auch mit <= nichts. Sad

Smily

BeitragMo, Jan 01, 2007 14:36
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jan 01, 2007 16:09
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group