Reloadtime
Übersicht

![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also sowas wie ein Magazin,
20 schuss dann Pause 1 sekunde für nachladen dann wieder 20 schuss so richtig? ![]() |
||
[BB2D | BB3D | BB+]
|
![]() |
Julz |
![]() Antworten mit Zitat ![]() |
---|---|---|
ja so mein ich das | ||
furbolg |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ICh hab dir 2x Code gepostet mit ein bisschen überlegen kannst du das doch wohl hinkriegen oder ? | ||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
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+]
|
walskiEhemaliger Admin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() walski [EDIT] Achja, für alle die zu faul sind zu lesen: Space = schießen [/EDIT] |
||
buh! |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ... ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@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 |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group