Допустим, мы создаем игру и у нас есть персонаж игрока.Этот персонаж в игре будет выполнять множество действий, таких как ходьба, прыжки, атака, поиск цели и т. Д .:
public class Player extends MovieClip
{
public function Player(){}
private function walk(){}
private function attack(){}
private function jumping(){}
...
..
.
private function update(){}
}
Теперь для каждого состояния или действия мы хотим выполнить свой код.Теперь, как это сделать?Я могу придумать 3 способа.
1. С событиями - как я понимаю, система событий дорогая, поэтому я пропущу этот.2. С помощью простых проверок в update () - что-то вроде if (currentStateAction) {doSomethingHere} или с оператором switch.Но что, если действия не являются взаимоисключающими, например, они могут прыгать и атаковать одновременно?Чем мы должны использовать if () для каждого действия, например, для проверки каждого кадра.3. Я придумал это решение самостоятельно и мне нужно знать, лучше ли это, чем вариант № 2:
//declare Dictionary. Here we will add all the things that needs to be done
public var thingsToDo:Dictionary = new Dictionary(true);
//in the update function we check every element of the dictionary
private funciton update():void
{
for each(item:Function in thingsToDo)
{
item.call();
}
}
Теперь, каждый раз, когда нам нужно что-то делать, мы добавляем элемент, например thingsToDo[attack]=attack;
Или, если мы больше не хотим что-то делать: delete thingsToDo[attack];
В этой ... системе ... вам не нужно проверять каждый кадр, что должен делать объект, но вместо этого,Вы проверяете только когда это необходимо.Это как система управления событиями.Скажем, например, объект не должен проверять атаку, пока не появится новый враг.Так.при появлении нового врага вы добавите thingsToDo [attack] = attack;и т. д.
Итак, вопрос: это быстрее, чем вариант № 3?Любая идея, как сделать эту проверку по-другому?Благодарю.