#1
|
|||
|
|||
Problem with viztask, callback, and oncollide
Hello, I am trying to use viztask to wait for at least 5 seconds before calling a function as seen below. I know you need to call condition 1 with viztask.schedule(condition1()), but with that I still get errors maybe it's because of the second function in it which i am using the yield call on. But I have tried using it with the callback but to no avail. Please any help will be appreciate and the oncollide function is not called anywhere else but in the function condition1.
def condition1(): #Code........... . . . #more code def oncollide(e): #Check if a ball collided with a duck #code............. if e.obj2 in ducks: #code............. e.obj2.execute(2) #code............. #Increment score scoreLabel.score += 10 scoreLabel.message(str(scoreLabel.score)) panel.visible(True) endPanel.visible(False) op1PanelLabel6.label.color(viz.GREEN) yield.waitTime(5) default() elif e.obj2 in ducks2: #code............. e.obj2.execute(2) #code............. #Increment score scoreLabel.score += 15 scoreLabel.message(str(scoreLabel.score)) panel.visible(True) endPanel.visible(False) op1PanelLabel6.label.color(viz.GREEN) yield.waitTime(5) default() elif e.obj2 in ducks3: #code............. e.obj2.execute(2) #code............. #Increment score scoreLabel.score +=20 scoreLabel.message(str(scoreLabel.score)) panel.visible(True) endPanel.visible(False) op1PanelLabel6.label.color(viz.GREEN) yield.waitTime(5) default() elif e.obj2 not in ducks or e.obj2 not in ducks2 or e.obj2 not in ducks3 : #code............. #code............. viz.callback(viz.COLLIDE_BEGIN_EVENT,oncollide) |
#2
|
|||
|
|||
Can you describe the end result you are looking for in this script?
|
#3
|
|||
|
|||
I am sorry, but the reason why I didn't include much code is because everything works. The problem is, In the oncollide function there's a yield to pause time for 5 secs before calling the function default(). But for I keep getting errors on the use viztask, maybe it's because the function called is within the fuction using viztask.schedule. If so how do I implement the use of yield.waitTime in a callback oncollide function.
def condition1(): #Code........... . . . #more code def oncollide(e): #Check if a ball collided with a duck #code............. if e.obj2 in ducks: #code............. e.obj2.execute(2) #code............. #Increment score scoreLabel.score += 10 scoreLabel.message(str(scoreLabel.score)) panel.visible(True) endPanel.visible(False) op1PanelLabel6.label.color(viz.GREEN) yield.waitTime(5) default() elif e.obj2 in ducks2: #code............. e.obj2.execute(2) #code............. #Increment score scoreLabel.score += 15 scoreLabel.message(str(scoreLabel.score)) panel.visible(True) endPanel.visible(False) op1PanelLabel6.label.color(viz.GREEN) yield.waitTime(5) default() elif e.obj2 in ducks3: #code............. e.obj2.execute(2) #code............. #Increment score scoreLabel.score +=20 scoreLabel.message(str(scoreLabel.score)) panel.visible(True) endPanel.visible(False) op1PanelLabel6.label.color(viz.GREEN) yield.waitTime(5) default() elif e.obj2 not in ducks or e.obj2 not in ducks2 or e.obj2 not in ducks3 : #code............. #code............. viz.callback(viz.COLLIDE_BEGIN_EVENT,oncollide) def Begin(): viztask.schedule(condition1()) |
#4
|
|||
|
|||
You can wait for a physics collision event within a task function. Here's an example:
Code:
import viz import viztask viz.go() viz.clearcolor(viz.SLATE) ground = viz.addChild('ground.osgb') ground.collidePlane() ball = viz.addChild('beachball.osgb',pos=[0,3,6]) ball.collideSphere() ball.enable(viz.COLLIDE_NOTIFY) def collideTask(): # wait for spacebar to enable physics yield viztask.waitKeyDown(' ') viz.phys.enable() # wait for collision event d = yield viztask.waitEvent(viz.COLLIDE_BEGIN_EVENT) if d.data[0].obj1 == ball: collisionPoint = d.data[0].pos print 'the ball collided at',collisionPoint # wait 5 seconds yield viztask.waitTime(5) print '5 seconds elapsed' viztask.schedule( collideTask() ) |
#5
|
|||
|
|||
I tried to use the vizact.ontimer2, and it was the perfect solution my program needed. Thanks so much. Great help.
|
Thread Tools | |
Display Modes | Rate This Thread |
|
|