Vizard's Task feature makes writing code that you want to happen over time easier. Tasks are functions that pause as they wait for some condition (like 2 seconds to pass or spacebar pressed) before continuing with their local variables preserved.
Say you want a traffic light that changes color every second. Using timers, you could create a Vizard timer event that sets the next color based on a global variable that remembers the previous color. Or you could create a self-contained task function.
Code:
import viztask
ball = viz.add('white_ball.wrl', pos=[0, 1.7, 1])
def doStoplight(theBall):
while True:
theBall.color(viz.GREEN)
yield viztask.waitTime(1)
theBall.color(viz.YELLOW)
yield viztask.waitTime(.5)
theBall.color(viz.RED)
yield viztask.waitTime(1)
viztask.schedule(doStoplight(ball))
First, the code imports the viztask module of Vizard that provides the Task functionality. After adding our stoplight ball we define our task function just like a normal function. The function becomes a task function because of the "yield" statement. The yield statement indicates when the task pauses and waits for some seconds. When the wait time is up, the next lines of code are run until we hit another yield statement. The last line passes an instance of our "doStoplightTask" to the scheduler. The scheduler triggers the execution of the task. Tasks must be scheduled to run, they can't be called like normal functions.
Creating tasks that wait for other tasks can simplify programs that progress though a series of states. Research experiments often progress though these states: get parameters; present a number of trials; finalize data recording. Here is a experiment framework using tasks:
Code:
import viztask
def doExperimentTask():
NUMBER_OF_TRIALS = 3
for i in range(NUMBER_OF_TRIALS):
yield doTrialTask(i)
print 'experiment done'
viztask.schedule(doExperimentTask())
def doTrialTask(trialNumber):
#present stimulus
yield viztask.waitKeyDown(' ') #gather response
#record data
print 'trial number', trialNumber
More information regarding Vizard task is in your Vizard help file and at this address:
http://www.worldviz.com/vizhelp/VizTask_basics.htm