LGame游戏引擎主要组件之一AVGame详解(结合具体的代码讲解)

首先对一个典型的例子进行仔细的剖析,后面再给出具体的理论分析。


/**
*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));
		}
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值