whj
04-08-2009, 12:35 PM
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,
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)
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,
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)