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)