Reloadtime

Übersicht BlitzBasic Allgemein

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMo, Jan 05, 2004 20:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Also sowas wie ein Magazin,
20 schuss
dann Pause 1 sekunde für nachladen
dann wieder 20 schuss
so richtig? Question
[BB2D | BB3D | BB+]

Julz

BeitragMo, Jan 05, 2004 20:31
Antworten mit Zitat
Benutzer-Profile anzeigen
ja so mein ich das
 

furbolg

BeitragMo, Jan 05, 2004 20:33
Antworten mit Zitat
Benutzer-Profile anzeigen
ICh hab dir 2x Code gepostet mit ein bisschen überlegen kannst du das doch wohl hinkriegen oder ?

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMo, Jan 05, 2004 20:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab mir da was überlegt, in der Hauptschleife:Code: [AUSKLAPPEN]
;schiessen
If Magazin  =  0 Then
    Magazinleerzeit = MilliSecs() +1000; 1 Sekunde
     Magazin  = 20
End If
If  MilliSecs() > Magazinleerzeit  Then
     schiessen() ; <<<<<<                                  bereits in Hauptschleife
     Magazin = Magazin -1
End If

sowas ähnliches hast du bestimmt schon bekommen von furbolg
könnt ihr euch ja mal ansehen
[BB2D | BB3D | BB+]
 

walski

Ehemaliger Admin

BeitragMo, Jan 05, 2004 21:43
Antworten mit Zitat
Benutzer-Profile anzeigen
fubolg, wir sind nicht doof, es war hier aber nicht nach ner Spielbremse oder ähnlichem Gefragt, sondern nach ner Möglichkeit nach n Schüssen n Nachladen zu simulieren.

Mit meinem Code würde ich das etwa so machen:
Code: [AUSKLAPPEN]

; just a tiny timer demo
; (c) 2004 by walski

;Initialisierung
Type TimerHandle
   Field ID
   Field StartTime
   Field Runtime
End Type
;Modi von manipulateTimer
Const t_ResetTimer=1,t_CreateTimer=2,t_DeleteTimer=3,t_ModifyTimer=4
Const t_AutoReset = 1

;wirrer Teil
Global ShotCount = 0
Type Shot
   Field x,y,speed
End Type
Global Shots.Shot

Global ReloadTime = 1000
Global ReloadTimer = manipulateTimer(t_Createtimer,1)
Global MagCount = 30
Graphics 800,600,32,1
SetBuffer BackBuffer()
While Not KeyDown(1)
   Cls
    UpdateShots()
     UpdateShootKey()   
    Text 1,1,ShotCount
    Flip
Wend

Function UpdateShots()
   LockBuffer BackBuffer()
   For Shots = Each Shot
      Shots\x = Shots\x-Shots\Speed
      WritePixelFast Shots\x,Shots\y,$FFFFFFFF
      If Shots\x<0 Then Delete Shots
   Next
   UnlockBuffer BackBuffer()
End Function

Function UpdateShootKey()
   If KeyDown(57) Then
      If t_TimerDone(ReloadTimer) Then
         manipulateTimer(t_ModifyTimer,ReloadTimer,1)
         ShotCount = ShotCount + 1
         Shots = New Shot
            Shots\x = 400
            Shots\y = 300
            Shots\Speed = 3
         If ShotCount>=MagCount Then
            manipulateTimer(t_ModifyTimer,ReloadTimer,ReloadTime)
            ShotCount = 0
         EndIf
      EndIf
   EndIf
End Function

   

;Funktionen
Function manipulateTimer(Action,Param=0,Param2=0)
   Local temp_Timer.TimerHandle
   Local cID=0
   Select Action
      Case 1
         For temp_Timer = Each TimerHandle
            If temp_Timer\ID = Param Then
               temp_Timer\StartTime = MilliSecs()
               Return 1
            EndIf
            If temp_Timer\ID>cID Then cID = temp_Timer\ID
         Next
         Return 0
      Case 2
         temp_Timer = New TimerHandle
            temp_Timer\ID = cID + 1
            temp_Timer\StartTime = MilliSecs()
            temp_Timer\Runtime = Param
         Return temp_Timer\ID
      Case 3
         For temp_Timer = Each TimerHandle
            If temp_Timer\ID = Param Then
               Delete temp_Timer
               Return 1
            EndIf
         Next
         Return 0
      Case 4
         For temp_Timer = Each TimerHandle
            If temp_Timer\ID = Param Then
               temp_Timer\Runtime = Param2
               Return 1
            EndIf
         Next
         Return 0
   End Select
   Return 0
End Function

Function t_TimerDone(ID)
   Local temp_Timer.TimerHandle
   For temp_Timer = Each TimerHandle
      If temp_Timer\ID = ID Then
         If (temp_Timer\Starttime + temp_Timer\Runtime) - MilliSecs() < 0 Then
            If t_AutoReset=1
               temp_Timer\Starttime = MilliSecs()
            EndIf
            Return 1
         Else
            Return 0
         EndIf
      EndIf
   Next
   Return 0
End Function


Ich gebe zu, für so ein simples Problem sicher eine sehr umfangreiche Lösung, aber dafür ist sie gut ausbaubar Wink

walski

[EDIT]
Achja, für alle die zu faul sind zu lesen: Space = schießen
[/EDIT]
buh!

BladeRunner

Moderator

BeitragMo, Jan 05, 2004 23:28
Antworten mit Zitat
Benutzer-Profile anzeigen
nur als kleine Anregung (habs noch nit probiert, weil auf arbeit- sollte aber gehen):
Solltest du schon einen "reload"-Sound haben, spiele ihn alle x (=Anzahl im Magazin) Schüsse und lasse neue schüsse erst zu, wenn channelplaying 0 zurückgibt, sprich: der sound abgelaufen ist.
Hat auch den Vorteil dass dein Reloadsound perfekt in die Pause passt ... Wink


Also ungefähr so (achtung pseudo...)Code: [AUSKLAPPEN]

;mainloop:
if schußtaste then
  if channelplaying (reload)=0 then
  schuss=schuss+1: schuss()
    if schuss>20 then schuss=1: playsound (reload)
  end if
 end if
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Julz

BeitragDi, Jan 06, 2004 0:17
Antworten mit Zitat
Benutzer-Profile anzeigen
@Blade Runner Schlau gelöst 8)
Ich werds mal versuchen muss allerdings noch en reload sound suchen
@walski sorry bin en noob ich glaub mit deinem code komm ich nicht zu recht ist en bisschen umfangreich

BladeRunner

Moderator

BeitragDi, Jan 06, 2004 0:30
Antworten mit Zitat
Benutzer-Profile anzeigen
ach... wär mir nachträglich eingefallen: damit dir der letzte schußsound nit in die quere kommt, würd ich beim nachladesound am anfang etwas stille einfügen[ca. ne 1/2 sek. oder so] (damit kannst du dann auch effektiv steuern, wie lange das nachladen dauert...)
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Julz

BeitragDi, Jan 06, 2004 11:56
Antworten mit Zitat
Benutzer-Profile anzeigen
riesen dank an alle vor allem an furbolg der mit das mit den millisecs erklärt hat, hab das problem auch damit gelöst wie Rene es mir erklärt hat thx

Hier der beweis das ich nicht unfähig bin:

Code: [AUSKLAPPEN]

for l = 0 to 20
if schuss(0,l,0) = 1 then
drawimage boom, schuss(0,l,1), schuss(0,l,2)
schuss(0,l,2) = schuss(0,l,2) - 10
endif
next
if bremse + 10000 < Millisecs() then
for l = 21 to 40
if schuss(0,l,0) = 1 then
drawimage boom, schuss(0,l,1), schuss(0,l,2)
schuss(0,l,2) = schuss(0,l,2) - 10
endif
next
endif

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group