|  | 
| 
			 
			#1  
			
			
			
			
			
		 | |||
| 
 | |||
| 
				
				problem with yield statement and animation path
			 
			
			Hello! I have an animation that goes through a maze in a loop (4 times). I also have a yield statement that waits for an arrow key (see code below in red) but whenever I have it inside the function, it offsets everything, the animation seems to play twice before waiting for the arrow key and then it offsets all coordinates. Why does that happen? Code: import viz															
import viztask													
viz.clearcolor(viz.BLACK)
viz.go()
#Set the start position:
startPos = [-6.4,1.4,-8]
### Add all the resources. ############### 
maze1 = viz.add('Objects/Maze_1.dae')
maze1.visible(viz.OFF)
view = viz.MainView 
view.eyeheight(1.4)
view.setPosition(startPos)
view.collision(viz.ON)
viz.collisionbuffer(.8)
##Animation path
pathMaze1 = viz.addAnimationPath()
#Add control points to the path, along with their time stamp.
pathMaze1.addControlPoint(2, pos=startPos,euler=(0,0,0),scale=(2,2,2))
pathMaze1.addControlPoint(4, pos=startPos,euler=(90,0,0),scale=(2,2,2))
pathMaze1.addControlPoint(6, pos=(0,1.4,-8),euler=(0,0,0),scale=(2,2,2))
pathMaze1.addControlPoint(8, pos=(0,1.4,5),euler=(0,0,0),scale=(2,2,2))
#Duation of animation
pathMaze1Duration = pathMaze1.getDuration()
def animation():
	link = viz.link(pathMaze1,view)
	pathMaze1.play()
	yield viztask.waitTime(pathMaze1Duration)
	pathMaze1.reset()
def maze1trial():
	print 'now'
	view.setPosition(startPos)
	maze1.visible(viz.ON)
	yield animation()
	#yield viztask.waitKeyDown([viz.KEY_LEFT,viz.KEY_RIGHT])
	maze1.visible(viz.OFF)
def masterFunction():	
	for x in range(4):
		yield maze1trial()
viztask.schedule(masterFunction()) | 
| 
			 
			#2  
			
			
			
			
			
		 | |||
| 
 | |||
| 
			
			In order to run the code, I changed the model to the piazza. However, I didn't notice a coordinate offset from one trial to another. If you have viewpoint collision enabled and depending on the stepsize, the viewpoint can get bumped up on collisions with the scene. If you want to wait until the path is finished playing before doing something else, wait for a path end event: Code: import viz															
import viztask													
viz.go()
startPos = [-6.4,1.4,-8]
view = viz.MainView 
view.eyeheight(1.4)
maze1 = viz.add('piazza.osgb')
pathMaze1 = viz.addAnimationPath()
pathMaze1.addControlPoint(2, pos=startPos,euler=(0,0,0),scale=(2,2,2))
pathMaze1.addControlPoint(4, pos=startPos,euler=(90,0,0),scale=(2,2,2))
pathMaze1.addControlPoint(6, pos=(0,1.4,-8),euler=(0,0,0),scale=(2,2,2))
pathMaze1.addControlPoint(8, pos=(0,1.4,5),euler=(0,0,0),scale=(2,2,2))
pathMaze1.addEventAtEnd('maze_end')
link = viz.link(pathMaze1,view)
def trials():
	
	for x in range(4):
		
		print 'trial',x
		pathMaze1.play()
		yield viztask.waitPathEvent(pathMaze1, 'maze_end')
		yield viztask.waitKeyDown([viz.KEY_LEFT,viz.KEY_RIGHT])
		pathMaze1.reset()
	
viztask.schedule( trials() ) | 
| 
			 
			#3  
			
			
			
			
			
		 | |||
| 
 | |||
| 
			
			Thank you very much! Indeed, this version seems fine. I really need to troubleshoot my scripts usign that maze more in detail. Not sure why I get these resetting problems that I have been writing about. For now I solved the issue by not using animation paths but by using the goTo.
		 | 
|  | 
| Tags | 
| animation path | 
| Thread Tools | |
| Display Modes | Rate This Thread | 
| 
 | 
 | 
|  Similar Threads | ||||
| Thread | Thread Starter | Forum | Replies | Last Post | 
| animation path problem - coordinates not resetting | jelly | Vizard | 7 | 04-26-2016 10:45 AM |