View Single Post
  #1  
Old 04-08-2009, 12:35 PM
whj whj is offline
Member
 
Join Date: Apr 2008
Posts: 60
Timer Actions problem

Hello,

I wrote a small script basically want to play some animation paths in a specific schedule and every animation path can be played more than once.

In this script, I create an animation path for a ball and another animation path for a duck. The array time_to_go[] and object[] make a schedule for the ball and duck. Here I would like firstly duck start to move; and after 3 seconds, ball start to move; and after another 3 seconds, ball start to move again. Then done.

unfortunately the ball will start the 3rd time after my schedule. Could somebody help me diagnose what's wrong with it.

Thanks,


Code:
import viz
import math
viz.go()


viz.clearcolor(0.5,0.5,1)
viz.add('tut_ground.wrl')

#Add 2 models.
#One is a ball, the other is a duck.
model = []
ball = viz.add('ball.wrl')
duck = viz.add('duck.cfg')
model.append(ball)
model.append(duck)


#Add the path.
#path[0] is for the ball, path[1] is for the duck.
path = [] 
for x in range(2):
	pa = viz.addAnimationPath()
	path.append(pa)

positions = [ [5,1,6], [0,1,3], [-150,1,6] ]
for x in range(len(positions)):
    cp = viz.addControlPoint()
    cp.setPosition(positions[x])
    path[0].add(cp,x+1)
    path[1].add(cp,x+1)

for x in range(2):
	path[x].constantspeed(viz.ON,10)
	path[x].loop(viz.OFF)
	path[x].translatemode(viz.BEZIER)
	path[x].setAutoRotate(viz.ON)

#Link the model to a path.
ball.link(path[0])
duck.link(path[1])



def mytimer(num):
	for x in range(2):
		pos = model[x].getPosition()
		if pos[0] < -15 :
			path[x].pause()
			path[x].reset()
			model[x].setPosition(0,0,0)


def donothing():
    pass


#The following arrays means:
#Firstly: duck start to move
#After 3 seconds, ball start to move
#After another 3 seconds, ball start to move again
time_to_go = [0, 3, 6] 
object = [1, 0, 0] #1 means duck, 0 means ball


#Create an array of timer action
myTimerAction = []
for x in range(3):
	if (x == 0) : 
		myTimerAction.append(vizact.ontimer2(0, 1, donothing))
		path[object[0]].play()
	else: 
		wait = time_to_go[x] - time_to_go[0]
		myTimerAction.append(vizact.ontimer2(wait, 1, path[object[x]].play))
	

	
viz.callback(viz.TIMER_EVENT,mytimer)
viz.starttimer(0,0,viz.PERPETUAL)

Last edited by whj; 04-08-2009 at 12:41 PM.
Reply With Quote