PDA

View Full Version : multiple timers


paulpars
06-01-2006, 01:50 PM
i have two timers, one that listens for certain keyboard input, and another that makes a person walk around in my world. I want the first one to be always on, but is there a way to make the second one start after a certain elapsed time, say 5 seconds or so? here's what my timer function looks like:

def mytimer(num):
if num == 0:
brake = 0
if viz.iskeydown(viz.KEY_TAB):
brake = 1
if viz.iskeydown(viz.KEY_UP) and brake != 1:
view.move(0,0,MOVE_SPEED*viz.elapsed(),viz.BODY_OR I)
car2.translate(0,0,MOVE_SPEED*viz.elapsed(),viz.RE LATIVE)
elif viz.iskeydown(viz.KEY_DOWN):
view.move(0,0,-MOVE_SPEED*viz.elapsed(),viz.BODY_ORI)
car2.translate(0,0,-MOVE_SPEED*viz.elapsed(),viz.RELATIVE)
if viz.iskeydown(viz.KEY_RIGHT):
view.rotate(0,1,0,TURN_SPEED*viz.elapsed(),viz.BOD Y_ORI,viz.RELATIVE_WORLD)
elif viz.iskeydown(viz.KEY_LEFT):
view.rotate(0,1,0,-TURN_SPEED*viz.elapsed(),viz.BODY_ORI,viz.RELATIVE _WORLD)
updatecar()
# puts the walker on the screen
if num == 1:
walker.visible(viz.ON)
global walkerX, walkerY, walkerZ, walkerAngle
walker.rotate(0,1,0,90)
# calculate components of motion w.r.t X and Z axis
walkerZ = walkerZ - 0.00002 * math.sin(math.radians(walkerAngle))
walkerX = walkerX + 0.00002 * math.cos(math.radians(walkerAngle))
# move the walker
walker.translate(walkerX,walkerY,walkerZ,viz.RELAT IVE)



viz.callback(viz.TIMER_EVENT,mytimer)
viz.starttimer(0,0.01,viz.FOREVER)
viz.starttimer(1,0,viz.PERPETUAL)

halley
06-02-2006, 06:55 AM
A timer starts whenever you call viz.starttimer(), so your goal is to decide when it's appropriate to make that call.

Something like this sketch (this is not tested code):


timer_one = False

def mytimer(num):
if num == 0:
if not timer_one and viz.get(viz.FRAME_TIMESTAMP) > 5.0:
timer_one = True
viz.starttimer(1, 0, viz.PERPETUAL)
# do other timer-zero stuff
if num == 1:
# do other timer-one stuff

viz.callback(viz.TIMER_EVENT, mytimer)
viz.starttimer(0, 0.01, viz.FOREVER)

paulpars
06-02-2006, 09:12 AM
when I try to run that I get this error:


if not timer_one and viz.get(viz.FRAME_TIMESTAMP) > 5.0:
AttributeError: 'module' object has no attribute 'FRAME_TIMESTAMP'

Gladsomebeast
06-02-2006, 09:43 AM
You can also use the Python time module.

import time

#Gives number of seconds since program start
print time.clock()

paulpars
06-02-2006, 10:12 AM
ok that seems to work fine, thanks!