View Single Post
  #10  
Old 04-10-2009, 03:44 PM
whj whj is offline
Member
 
Join Date: Apr 2008
Posts: 60
Thank you, Jeff. It works!

Now I make a little change on the reset part. I would like to reset the object (duck or ball) right before being played. But I got the following error:

Traceback (most recent call last):
File "C:\Program Files\WorldViz\Vizard30/python\vizact.py", line 2980, in __ontimer
val = event.call()
File "C:\Program Files\WorldViz\Vizard30/python\vizact.py", line 2803, in _callStatic
return self.func(*self.args,**self.kwargs)
TypeError: 'NoneType' object is not callable



Could you please help me find the problem again? 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):
	pass

def reset(k):
	path[k].pause()
	path[k].reset()
	model[k].setPosition(0,0,0)
	

#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
for x in range(len(object)):
	if (x == 0) : 
		path[object[0]].play()
	else: 
		wait = time_to_go[x] - time_to_go[0]
		vizact.ontimer2(wait, 0, reset(object[x]))
		vizact.ontimer2(wait+0.00001, 0, path[object[x]].play)
	

	
viz.callback(viz.TIMER_EVENT,mytimer)
viz.starttimer(0,0,viz.PERPETUAL)
Reply With Quote