#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 |