速度优化 - 哪个更好?

时间:2011-10-03 13:22:15

标签: actionscript-3

让我们说我们建立一个游戏,我们有一个玩家角色。游戏中的角色会做很多动作,比如走路,跳跃,攻击,搜索目标等等:

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号选项更快吗?知道如何以不同方式进行检查吗? 谢谢。

1 个答案:

答案 0 :(得分:2)

您应该专注于使其按照您想要的方式工作(灵活,易于维护和修改),而不是尽可能快地完成。这不太可能成为真正的瓶颈。

过早优化是所有邪恶的根源,以及所有这些。