让我们说我们建立一个游戏,我们有一个玩家角色。游戏中的角色会做很多动作,比如走路,跳跃,攻击,搜索目标等等:
public class Player extends MovieClip
{
public function Player(){}
private function walk(){}
private function attack(){}
private function jumping(){}
...
..
.
private function update(){}
}
现在,对于我们想要执行不同代码的每个州或行动。现在,怎么做?我可以想到三种方式。
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];
在这个...系统中...你不需要检查每个帧对象应该做什么,而是只检查何时需要。这就像一个事件驱动系统。比如说,在新敌人产生之前,对象不需要检查攻击。所以。当产生新的敌人时,你会添加东西来攻击[攻击] =攻击;等等。
所以问题是:这比3号选项更快吗?知道如何以不同方式进行检查吗? 谢谢。
答案 0 :(得分:2)
您应该专注于使其按照您想要的方式工作(灵活,易于维护和修改),而不是尽可能快地完成。这不太可能成为真正的瓶颈。
过早优化是所有邪恶的根源,以及所有这些。