Что такое менеджер задач и для чего он нужен? Предположим,что в Вашу игру нужно добавить какую-нибудь функцию,которая будет выполняться постоянно,например искусственный интеллект врагов или проверку столкновений.Менеджер задач Panda3D позволяет добавлять эти функции для постоянного выполнения или же удалять их.Функция,которая добавляется в менеджер задач называется задачей или заданием(Task).Она должна обязательно иметь в описании параметр task и возвращать одно из ниже перечисленных значений: Task.done - функция выполнилась и удаляется из списка задач. Task.cont - функция выполнилась и она передаёт управление скриптом следующей по списку функции,но при этом сама она из списка НЕ УДАЛЯЕТСЯ Task.again - повторяет функцию с той же самой задержкой,что и при вызове. None - тоже самое,что и Task.done Для добавления или удаления функции в список задач используется глобальный объект taskMgr и его методы add и remove. Параметр task,который функция для выполнения требует по умолчанию,имеет следующие свойства: task.time Дробное число,характеризующее прошедшее время с первого запуска этой функции(в секундах); task.frame Целое число,характеризующее количество кадров,прошедших с момента добавления функции.Может иметь значение 0 или 1; task.id Целое число,обозначающее уникальный идентификатор задания,присвоенным ему менеджером задач; task.name Имя задания,присвоенное этой функции. Для импорта модуля менеджера задач необходима строка from direct.task import Task Простейший способ добавления функции: def MyFunc(task): mysphere.setH(task.time) #Вращаем сферу в зависимости от прошедшего времени return Task.cont #продолжаем выполнение скрипта taskMgr.add(MyFunc,'My function')
При желании мы можем её удалить так: taskMgr.remove('My function') При добавлении функции также можно указывать кортеж extraArgs[a,b,c,..], в котором указываются дополнительные параметры,передаваемые функции и предусмотренные пользователем.Например: def AI(task,obj): if obj.lifes<=0: #Если у обрабатываемого объекта закончились жизни, obj.death() #то он умирает return Task.done #и обработка его состояния убирается из списка задач return Task.cont #продолжаем выполнение скрипта(если до этого функция не возвращала никакого значения) taskMgr.add(AI,'AI',extraArgs=[player])
Также Panda3D позволяет добавлять задания,которые выполняются с задержкой после рендера кадра, но об этом позже...
Источник: http://panda3d.org/wiki/index.php/Tasks |