SurfaceView中的 InitiativeComponent、PassiveComponent

  SurfaceView中有两类元素:1、InitiativeComponent。2、PassiveComponent。

  InitiativeComponent即自动变化的组件,它的特点是时刻都有线程在在驱动它运行。比如 不停走动的小兵,上下浮动食人花。

  对于这类元素,应该为他们创建Initiative接口:

public interface Initiative extends Runnable {
//暂停
public void pause();
//恢复
public void resume();

}

  继承Runnable,表明此元素可以与UI线程同时运行,不因UI被阻塞而停止活动。为Initiative设计pause()和resume()函数,是为控制线程的的活动。设想一下,在如果你在完愤怒的小鸟中,你暂停一下,却发现游戏还在运行,你会觉奇怪吗。

  这类元素会在关卡启动后,就开始运行。

 

  PassiveComponent即被动变化的组件,特点是它是被动触发的。比如:主角被砍了一到,血下降了,同时在主角上冒出了【-25】的字样;主角消灭一个敌人,分数加【100】

  对于这样的元素,应当使用Listener来处理,分数板为例:

public interface ScoreListener {
public void onScoreAdded(Score score,Action action);

} 

  一旦主角有任何动作,可以轻松把结果通知分数版;同样的道理,也可为其添加 【连击】,【血条】,【聚气】等等一些列特性。

 

  最后,这两种元素,都得实现drawable接口:

public interface Drawable {
public void draw(Canvas canvas);
}

  UI线程才能有机会调用,在屏幕上才能到看到NB的主角。

 

  总上所述,可以达到两个目的:1、计算与UI分离。2、划分 Initiative/Passive,以便于更好的扩展,维护。

posted on 2011-12-23 11:55  small.ming  阅读(261)  评论(0编辑  收藏  举报

导航