Reloadtime
Übersicht

![]() |
JulzBetreff: Reloadtime |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kann mir jemand erklären warum das nicht geht ![]() Code: [AUSKLAPPEN] for l = 0 to 80 for i = 0 to 3 if schuss(i,l,1) = 20 then schusscounter = schusscounter + 1 if schusscounter = 10 then schusscounter = 0 endif next next Das soll eine art verzögerung sein um eine reloadtime zu simulieren |
||
furbolg |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
und wo ist die Verzögerung ? Du brauchst noch ein Schussdelay, wärend dieses Delays darfst du dann nich feuern.
if SchussCounter <= 0 then ;reload SchussCounter = 10 SchussDelay = MilliSecs() + 1000 ;(millisecunden) end if ;schuss if Taste für Schuss and SchussCounter > 0 and SchussDelay > MilliSecs() then ; schuss end if // Edit Ne is falsch, aber so ungefähr ... weiss nich mehr genau, bin bissl verpennt |
||
- Zuletzt bearbeitet von furbolg am Mo, Jan 05, 2004 16:06, insgesamt einmal bearbeitet
![]() |
Julz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja ich dachte für das hochzählen des schusscounters braucht der en bisschen zeit und da würde dann eine lücke entstehen ![]() |
||
furbolg |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
warte...
If SchussTaste then If SchussDelay < MilliSecs() then ;feuer ;sound SchussDelay = MilliSecs() + 100 ;100 ms SchussCounter = SchussCounter - 1 endif if SchussCounter <= 0 then ;reload ;sound SchussCounter = 10 SchussDelay = MilliSecs() + 3000 ;3 sek end if end if sollte klappen |
||
![]() |
Julz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Soll ich ganz ehrlich sein ich versuch die ganze zeit dieses Millisecs() zu umgehen.....gibt es kein anderen weg ich versteh es nämlich nicht ![]() |
||
furbolg |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Warum ? Was is daran so schwer ? Frag doch mal spezieller. | ||
![]() |
Julz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja dieses millisecs() was bringt mir das das zeigt einem doch die zeit wann windows gestartet wurde und ich versteh den zusammenhang dann nicht, dann bekommt man doch en wert der über ne milliarde ist oder ???
und ich versteh nicht wie man damit sein spiel bremsen kann ![]() |
||
furbolg |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
uhm pass auf, die Vergegangen Zeit ist egal, es können auch Zilliarden sein, es kommt doch bloss auf die Differenz an.
Beispiel: Action1 Warte 100 ms Action2 jetzt mit MS zeiten Action1 - 10282992100 Warte 100ms Action2 - 10282992200 Das heisst er führt Aktion 2 erst nach 100 MS aus, egal wie groß MilliSecs() ist. Darum schreib ich ja auch immer SchussDelay = MilliSecs() + 100 und nich SchussDelay = 100 ![]() |
||
![]() |
Julz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Aber das könnte ich doch dann auch mit meinem counter lösen der auch einfach 100 millisekunden oder sekunden hochzähl und dann geht das spiel weiter oder nicht ???
Aber danke jetzt hab ich da mit den Millisecs() glau'bch verstanden ![]() |
||
furbolg |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Davon würd ich abraten... MilliSecs() Methode is mir lieber ![]() |
||
![]() |
Julz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Axo ok thx | ||
![]() |
Maniac |
![]() Antworten mit Zitat ![]() |
---|---|---|
Im alten forum hat mir das divi mal erklärt gelle? xD
Najo n delay hält dir alles an... jede grafik ausgabe, einfach alles, also is davon ab zu raten^^ |
||
User posted image
^^ |
René Meyer |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: Aber das könnte ich doch dann auch mit meinem counter lösen der auch einfach 100 millisekunden oder sekunden hochzähl und dann geht das spiel weiter oder nicht ???
Nein, denn diese Schleife wird auf jedem PC unterschiedlich schnell ausgeführt. In ein paar Jahren sind PCs so schnell, daß die Pause gar nicht mehr zu spüren ist. Manche Spiele aus den 80er Jahren sind heute unspielbar schnell, weil sie genau so programmiert wurden. MilliSecs() ist kaum schwerer zu benutzen. Die Funktion gibt Dir eine Zahl, die jede Sekunde um 1000 (bzw. jede Tausendstelsekunde um 1) wächst. Für eine Pause von einer Sekunde könntest Du z.B. sowas programmieren: StopUhrStart = MilliSecs() Und dann in der Spielschleife: If StopUhrStart + 1000 < MilliSecs() Then ... ; mehr als eine Sekunde vergangen |
||
www.blitzbasic.de | Das Buch zu Blitz Basic: www.schreibfabrik.de/txt/bbb |
![]() |
Hip Teen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Heut wird anscheinend genauso gearbeitet. Das Spiel Pro Evolution Soccer 3 hat nämlich keine Geschwindigkeitsbegrenzung. Um das Auf schnellen Rechnern zu spielen muss man dann die Details etc. hochschrauben. In zwei Jahren ist das nicht mehr spielbar.
Sorry wenn das zu sehr OT war, wollt ich aber nur mal sagen |
||
![]() |
Julz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Axo ok danke an alle ich versuchs noch mal
Also hier ist eine meiner vier schießroutinen: Code: [AUSKLAPPEN] If KeyDOWN(space) And z = 1 and (not keydown(oben)) and (not keydown(links)) and (not keydown(unten)) and (not keydown(rechts)) Then shoot = shoot + 1 if shoot = 20 then if bremse + 1000 < Millisecs() then shoot = shoot + 1 if shoot = 80 then shoot = 0 schuss(0,shoot,0) = 1 schuss(0,shoot,1) = x + 20 schuss(0,shoot,2) = y If frame > 64 Then frame = 64 If frame < 64 Then frame = 64 counter = counter - 1 If counter = 0 Then counter = 8 frame = frame + 1 endif endif endif |
||
- Zuletzt bearbeitet von Julz am Mo, Jan 05, 2004 17:58, insgesamt einmal bearbeitet
walskiEhemaliger Admin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So, spontanes Bedürfnis das hier zu schreiben:
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 ;Anweisungen runtime = 100 timer = manipulateTimer(t_CreateTimer,runtime) For i=1 To 3 Print Runtime For j=1 To 2 Print MilliSecs() While Not t_TimerDone(timer) Wend Print MilliSecs() Print "----------" Next runtime = runtime * 2 manipulateTimer(t_ModifyTimer,timer,runtime) Next WaitKey() ;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 walski |
||
buh! |
![]() |
Julz |
![]() Antworten mit Zitat ![]() |
---|---|---|
....
versteh ich nicht |
||
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ Julz ![]() Warum immer alles so kompliziert. So wie ich das verstanden habe soll nach jedem Schuss eine Zeitspanne existieren, in dem kein weiterer Schuß abgegeben werden kann. Ich habe das mal so gemacht: Code: [AUSKLAPPEN] StartZeit = MilleSecs() Repeat ; Hauptschleife Anfang Zeit = MilliSecs() - StartZeit ; Timer für Dauerfeuer If KeyDown(57) And Zeit > 100 Then StartZeit = MilliSecs(): Gosub Feuern: ; Feuern (Space-Taste) So entsteht nach jedem Schuss, auch bei gedrückter Feurrtaste eine 100ms Feuerpause. |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
![]() |
Julz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja das ist fast was ich brauche ich will nicht nach jedem schuss eine verzögerung sondern nach ca. 20 oder 30 schuss so ne art reloadtime | ||
furbolg |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@Pc-Master & Frame Bremse Leutz:
Es gibt noch einen besseren Weg, wie das Spiel immer spielbar bleibt. Man misst die Zeit die ein Frame gebraucht hat und nimmt diese mal der bewegung (heisst bei 10 frames, ist Delta 0.1 groß). Diese Technik wird auch bei Diablo 2 verwendet. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group