Главная » Статьи » Учебник: теория

Менеджер задач Panda3D
Что такое менеджер задач и для чего он нужен? Предположим,что в Вашу игру нужно добавить какую-нибудь функцию,которая будет выполняться постоянно,например искусственный интеллект врагов или проверку столкновений.Менеджер задач 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
Категория: Учебник: теория | Добавил: dpsstudio (28.01.2009) | Автор: Дмитрий Панченко
Просмотров: 3864 | Комментарии: 1 | Рейтинг: 5.0/1
Всего комментариев: 1
1  
очень полезная штука, буду учится её применять cool

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Онлайн всего: 1
Гостей: 1
Пользователей: 0