首先对一个典型的例子进行仔细的剖析,后面再给出具体的理论分析。
/**
*AVGScreen是LGame引擎的四种Scrren之一
*与其他Screen的主要区别在于 他直接继承CanvasScreen,且必须注入脚本才能运作。
*该类默认自动刷新画面
**
/
public class MyAVGScreen extends AVGScreen {
//Lpaper就相当于一张白纸 本身是不现实任何东西
//所以可以向其中任何需要显示的组件
LPaper roleName;
// 自定义命令(有些自定义命令为了突出写成了中文,实际不推荐)
String flag = "自定义命令.";
String[] selects = { "鹏凌三千帅不帅?" };
int type;
public MyAVGScreen() {
//这一行代码就说明了AVGScrren必须注入相关的脚本才能够运行
super("res/script/s1.txt", MessageDialog.getRMXPDialog("res/w6.png",
460, 150));
}
/**
* 初始化时候加载的数据
*/
public void onLoad() {
roleName = new LPaper("res/name0.png", 25, 25);
//经过测试 这一行代码是没有用的
leftOn(roleName);
//object.setLocation(0, h / 2 - object.getHeight() / 2);
roleName.setLocation(5, 15);
add(roleName);
}
//父类是一个抽象类 是没有任何的实现的逻辑
public void drawScreen(LGraphics g) {
switch (type) {
case 1:
g.setAntiAlias(true);
g.drawSixStart(LColor.yellow, 130, 100, 100);
g.setAntiAlias(false);
break;
default:
break;
}
}
//修正游戏脚本的设置
//否则以默认的模式运行
public void initCommandConfig(Command command) {
// 初始化时预设变量
command.setVariable("p", "res/p.png");
command.setVariable("sel0", selects[0]);
}
public void initMessageConfig(LMessage message) {
}
public void initSelectConfig(LSelect select) {
}
//将脚本语言中的脚本逐一提取出来
public boolean nextScript(String mes) {
message.setLocked(false);
// 自定义命令(有些自定义命令为了突出写成了中文,实际不推荐)
if (roleName != null) {
if ("noname".equalsIgnoreCase(mes)) {
//如果读取到的脚本语言是 noname
roleName.setVisible(false);
} else if ("name0".equalsIgnoreCase(mes)) {
roleName.setVisible(true);
roleName.setBackground("res/name0.png",false);
roleName.setLocation(5, 15);
} else if ("name1".equalsIgnoreCase(mes)) {
roleName.setVisible(true);
roleName.setBackground("res/name1.png",false);
roleName.setLocation(getWidth() - roleName.getWidth() - 5, 15);
}
}
if ((flag + "星星").equalsIgnoreCase(mes)) {
// 添加脚本事件标记(需要点击后执行)
setScrFlag(true);
type = 1;
return false;
} else if ((flag + "去死吧,星星").equalsIgnoreCase(mes)) {
type = 0;
} else if ((flag + "关于天才").equalsIgnoreCase(mes)) {
message.setVisible(false);
setScrFlag(true);
// 强行锁定脚本
setLocked(true);
LButton yes = new LButton("res/dialog_yes.png", 112, 33) {
public void doClick() {
// 解除锁定
setLocked(false);
// 触发事件
// click();
// 删除当前按钮
remove(this);
}
};
centerOn(yes);
add(yes);
return false;
}
return true;
}
public void onExit() {
// 重新返回标题画面
setScreen(new TitleScreen());
}
public void onSelect(String message, int type) {
if (selects[0].equalsIgnoreCase(message)) {
command.setVariable("sel0", String.valueOf(type));
}
}
}