2011-10-03 53 views
0

比方说,我们建立一个游戏,我们有一个玩家角色。在游戏中角色会做很多动作,如散步,跳,攻击,搜索目标等:速度优化 - 哪个更好?

public class Player extends MovieClip 
{ 
    public function Player(){} 
    private function walk(){} 
    private function attack(){} 
    private function jumping(){} 
    ... 
    .. 
    . 
    private function update(){} 
} 

现在,对于每一个国家或行动,我们要执行不同的代码。现在,如何做到这一点?我可以想到3种方法。

1.采用事件 - 据我所知,事件系统是昂贵的使用,所以我会跳过这一个。 2.在更新简单的检查() - 像如果(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更快?任何想法如何做这个检查不同? 谢谢。

回答

2

你或许应该集中精力使它的工作您想要的方式(灵活,易于维护和修改),而不是使之尽可能快。这是不太可能成为真正的瓶颈。

过早的优化是所有罪恶的根源,以及所有。