Reloadtime

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Julz

Betreff: Reloadtime

BeitragMo, Jan 05, 2004 15:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann mir jemand erklären warum das nicht geht Question

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

BeitragMo, Jan 05, 2004 16:02
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jan 05, 2004 16:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja ich dachte für das hochzählen des schusscounters braucht der en bisschen zeit und da würde dann eine lücke entstehen Embarassed ist das nicht so ???
 

furbolg

BeitragMo, Jan 05, 2004 16:19
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jan 05, 2004 16:21
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Embarassed
 

furbolg

BeitragMo, Jan 05, 2004 16:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum ? Was is daran so schwer ? Frag doch mal spezieller.

Julz

BeitragMo, Jan 05, 2004 16:41
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Embarassed
 

furbolg

BeitragMo, Jan 05, 2004 16:48
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile

Julz

BeitragMo, Jan 05, 2004 16:52
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Very Happy
 

furbolg

BeitragMo, Jan 05, 2004 16:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Davon würd ich abraten... MilliSecs() Methode is mir lieber Very Happy

Julz

BeitragMo, Jan 05, 2004 17:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Axo ok thx

Maniac

BeitragMo, Jan 05, 2004 17:10
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jan 05, 2004 17:10
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jan 05, 2004 17:13
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jan 05, 2004 17:19
Antworten mit Zitat
Benutzer-Profile anzeigen
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
 

walski

Ehemaliger Admin

BeitragMo, Jan 05, 2004 17:40
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jan 05, 2004 17:41
Antworten mit Zitat
Benutzer-Profile anzeigen
....










versteh ich nicht

Travis

BeitragMo, Jan 05, 2004 18:49
Antworten mit Zitat
Benutzer-Profile anzeigen
@ Julz Very Happy ich auch nicht!

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

BeitragMo, Jan 05, 2004 19:04
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jan 05, 2004 19:49
Antworten mit Zitat
Benutzer-Profile anzeigen
@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.

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group