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) 编辑 收藏 举报