Q:脚本的内聚

ScriptManager脚本管理器 管理的着脚本的update,draw

每条脚本的跳过都需要一个条件,

现在碰到了一个问题:

脚本本身跟游戏是紧密相连的,通过脚本来控制一些游戏的状态改变,

而脚本的跳过都是游戏来决定的。


解决方案

I 目前的

通过一个boolean变量mScriptEnd ,在游戏里调用设置,然后脚本update判断mScriptEnd 来跳过脚本。

	public void setScriptEnd(boolean scriptEnd) {
		mScriptEnd = scriptEnd;
//		error("scriptEnd" + scriptEnd);
	}

问题:

1.耦合太大,游戏调用脚本,脚本调用游戏

2.不支持并发

3.

II 预计的

脚本本身来判断脚本是否完成,从来避免了游戏调用脚本,确保了脚本本身的内聚。

目前难点:条件的判定



举个例子:单击装备按钮

I:在游戏单击按钮的地方加上

setScriptEnd(true)

脚本update里:

if(mScriptEnd) {
// 跳转脚本
setState(STATE_END);
}

II:在脚本自己的update里

if(btn.isTap()) {
// 跳转脚本
setState(STATE_END);
}


2012.6.11    改造中

1.目前支持AButton的单双击

2.


	/** 检测对象 */
	private Object mObjCheck;
	
	private enum TouchType {
		tap,        // 单击
		doubleTap,	// 双击	
	}
	private TouchType mCheckTouchType;
	
	// 设置
	mObjCheck =  scene.buttonMenu;
	mCheckTouchType = TouchType.tap;
	
	// 检测
	if (mObjCheck != null) {
		if (mObjCheck instanceof AButton) {
			AButton btn = (AButton) mObjCheck;
			if (mCheckTouchType.equals(TouchType.tap)) {
				skip = btn.isUp();
			} else if (mCheckTouchType.equals(TouchType.doubleTap)) {
				skip = btn.isDoubleClick();
			}
		} else if(mObjCheck instanceof AList) {
			AList list = (AList) mObjCheck;
			skip = list.getSelectIndex() != AList.NONE;
		} else if(mObjCheck instanceof BaseFighter) {
			BaseFighter bf = (BaseFighter) mObjCheck;
		}
	} 


你可能感兴趣的:(游戏,object,list,脚本,null)