stopwatch?
Blitz3D Forums/Blitz3D Programming/stopwatch?| 
 | ||
| Hello, I can make a timer time begins in high numbers and down. 10:11:50 .. 10:11:49 .. 10:11:48 .. | 
| 
 | ||
| Hi you can use CreateTimer()/Millisecs() to check if a 'second' is passed and decrease your 'clock'. You need to track Hours, Minutes & Seconds and write all the logic behind (>60 seconds means 1 Minute, 60 Minutes means 1 Hour etc) edit: (BlitzMax source, but the logic is the same) | 
| 
 | ||
| here is a pure blitzbasic solution: Graphics 320,200
Global H%=4
Global M%=30
Global S%=0
Global Time=MilliSecs()
Global Clock$
 
Repeat
	Cls
	Text 100,100, Clock$
	CheckTime
	Flip 1		
Until KeyHit(1)
Function CheckTime()
	If MilliSecs()>Time
		Time=Time+1000
		S=S-1
		
		If S<0
			M=M-1
			S=59
		End If
		
		If M<0
			H=H-1
			M=59
		End If
		clock = RSet("00" + H,2) +":" + RSet("00" + M,2) +":" + RSet("00" + S,2)
	EndIf	
End Function | 
| 
 | ||
| Thanks You. :) | 
| 
 | ||
| Hi , I have been able to implement the chronometer , however I have no idea how to put it on pause and then continue. Any suggestions .   | 
| 
 | ||
| Hi just use a global like timer_pause to change in the main game loop. If timer_pause=1 CheckTime() will skip to count, otherwise it acts normally. | 
| 
 | ||
| @degac No work, Apparently enters paused but resumed when the time has passed , for example if it stops at 45, and when reaunudo was 30 . 
Graphics 320,200, 32, 2
Global H%=4
Global M%=30
Global S%=0
Global Time=MilliSecs()
Global Clock$
Global timer_pause = 1
Repeat
	
	
	If KeyHit(200) timer_pause% = 1 - timer_pause
	Cls
	Text 100,100, Clock$
	CheckTime
	Flip 1		
Until KeyHit(1)
Function CheckTime()
	
	If timer_pause=1
	
	If MilliSecs()>Time
		Time=Time+1000
		
		
		
		
		S=S-1
		
		If S<0
			M=M-1
			S=59
		End If
		
		If M<0
			H=H-1
			M=59
		End If
	End If 
		Clock = RSet("00" + H,2) +":" + RSet("00" + M,2) +":" + RSet("00" + S,2)
	EndIf	
End Function
 | 
| 
 | ||
| Ok, no problem. 
Function CheckTime()
	
	
	
	If MilliSecs()>Time
		Time=Time+1000
		
		If timer_pause=1
		
		
		S=S-1
		
		If S<0
			M=M-1
			S=59
		End If
		
		If M<0
			H=H-1
			M=59
		End If
	End If 
		Clock = RSet("00" + H,2) +":" + RSet("00" + M,2) +":" + RSet("00" + S,2)
	EndIf	
End Function
How do I get milliseconds look ? 01:55:99 Minutes, Seconds, millisec. | 
| 
 | ||
| Hi ops... I did an error when I wrote the code, I've no more Blitz3d installed, so I tested something similar (not implying Millisecs()) in Bmax. Well, technically, you check the time every 1000 millisecs... so if you check Millisecs()>Time2+10 you can count them. | 
| 
 | ||
| @degac Thanks You.  I have always something new to learn . 
Global Mi%=1
Global Se%=59
Global Ml%=99
Global timeC
Global Clock$
Function CheckTime()
	
	
	
	If MilliSecs()>timeC
		timeC=timeC+1000
		
		If menu%=False
			
			
		Ml=Ml-1
			
		If Ml<0 Then 
			
			Se=Se-1
			Ml = 99
			
		End If
			
		If Se<0
			Mi=Mi-1
			Se=59
			End 
		End If
			
			
			
			
	End If 
		Clock$ = RSet("00" + Mi,2)  + ":" + RSet("00" +Se ,2) +":" + RSet("00" + Ml,2) 
	EndIf	
End Function
 | 
| 
 | ||
| Oops, problem here: 2 minutes Stopstopwatch. if Clock$ ="" End. 01:00: 00 change a to 00:00:00 exit program, One minute lost. :( Edit : No problem, Error en my code. :) | 
| 
 | ||
| 
Global Mi%=0
Global Se%=10
Global Ml%=99
Global timeC
Global Clock$
; - Update Volantes.
; -------------------
Function CheckTime()
	
	
	
	If MilliSecs()>timeC
		timeC=timeC+100
		If menu%=False
			
			
			Ml=Ml-1
			
			If Ml<0 Then 
				
				Se=Se-1
				Ml = 99
				
			End If
			
			If Se<0
				Mi=Mi-1
				Se=59
				
			End If
			
			
			
			
			
		End If 
		Clock$ = RSet("00" + Mi,2)  + ":" + RSet("00" +Se ,2) +":" + RSet("00" + Ml,2) 
	EndIf	
End Function
This seems to work properly, but it is not, the second are very delayed , are not real , any suggestions? | 
| 
 | ||
| there is a start/stop timer in the codearchives: Race Timer Functions it is counting up, but can be paused. | 
| 
 | ||
| @ Dan Thanks You. Is there any way to put a high boot on time. For example Start two minutes down the counter. ? | 
| 
 | ||
| 
Graphics3D 800, 600, 32, 2
camara% = CreateCamera()
Global ml% = 99
Global mi% = 10
b% = LoadFont("blitz",30) 
SetFont b
s% = MilliSecs()
While Not KeyHit(1)
	
	
	
	If MilliSecs() > s% 
		s% = s% + 10
		ml% = ml% - 1
		
	End If 
	
	
	
	If ml% < 0 Then 
		
		
		mi = mi - 1
		
		
		ml% = 99
		
		
	End If 
	
	
	If mi% <  0
		
		
		mi% = 0
		ml% = 0
		
	End If 
	
	
	RenderWorld 
	Text 0, 0, ml%
	Text 0, 50, mi%
	
	Flip 
	
	
	
	
	
Wend 
Ok, no problem, I 'm understanding the millisecs command ( ) | 
| 
 | ||
| if you need hundredth you have to optimize the code. First problem is, that with "FLIP 1" the code only repeats 60 times a second, but you would need 100 times. 60 times a second means that Millisecs() increases 16msec every repeat, but your TIME only increases 10msec. So TIME will have a (continously growing) delay. So you have to do this: Graphics 320,200,0,2
Global H%=4
Global M%=30
Global S%=0
Global Small%=0
Global Time=MilliSecs()
Global Clock$
 
Repeat
	Cls
	Text 100,100, Clock$
	CheckTime
	Flip 0	
Until KeyHit(1)
Function CheckTime()
	If Time > MilliSecs() Return 
	While MilliSecs()>Time	
		Time=Time+10
		Small=Small-1
		If Small<0
			S=S-1
			Small=99
		EndIf
		If S<0
			M=M-1
			S=59
		End If
		
		If M<0
			H=H-1
			M=59
		End If
	Wend
	clock = RSet("00" + M,2) +":" + RSet("00" + S,2) +":" + RSet("00" + Small,2)
End FunctionThe small interval of 10msec will stress your computer. To prevent this you could only use an interval of 100msec and fake the last digit: Graphics 320,200,0,2
Global H%=4
Global M%=30
Global S%=0
Global Small%=0
Global Time=MilliSecs()
Global Clock$
Global timer_pause = 0	
 
Repeat
	Cls
	Text 100,100, Clock$
	CheckTime
	If KeyHit(2)
		 timer_pause = 1-timer_pause
	EndIf
	Flip 1	
Until KeyHit(1)
Function CheckTime()
	Local count%=0 
	While MilliSecs()>Time
		Time=Time+100
		If timer_pause=1 Return
		Small=Small-1
		If Small<0
			S=S-1
			Small=9
		EndIf
		If S<0
			M=M-1
			S=59
		End If
		
		If M<0
			H=H-1
			M=59
		End If
	clock = RSet("00" + M,2) +":" + RSet("00" + S,2) +":" + RSet("0" + Small,1) +Rand(0,9) 
	Wend
End Function | 
| 
 | ||
| @MideMaster Thanks You :) | 
| 
 | ||
| As evaluated when a zero comes ? if clok$ = "00:00:00:00" End No working here. | 
| 
 | ||
| no, the time is over when H=0 and M=0 and S=0 and SMALL<1. | 
| 
 | ||
| @MidiMaster. Thanks You. :) |