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;
}
}