有了前几章的积累:现在可以给大家展现一下完整的项目了。
这是一个平台的游戏界面
接下来看看脚本是怎么样写的:
具体可以看这里的完整演示:http://rc.qzone.qq.com/100641772
这个机器人AI仿真引擎。使用Flash作为宿主,Lua作为脚本。与通常不同:利用脚本编程,设计AI智能,使机器人自主行动。这是一个有趣的编程平台,使用几行简单的代码,就能够创建一个活生生的机器人。
(1)可以用一种直观的方式学习Lua语言,而免去安装配置环境的麻烦,打开输出窗口,就是一个Lua编辑器,并体会到脚本在游戏中是如何起作用的。
(2)对学习游戏制作感兴趣的朋友。可以通过这样的一个应用来了解游戏编程的秘密,看到机器人如何遵循物理定律的运动,碰撞等事件的触发处理,导弹的发射...
(3)所有对AI感兴趣的朋友,这是一个直观的AI模拟仿真平台,可以观察一个AI的物体的自主行动,也可以创建多个机器人进行PK,或者协作,甚至可以做一个很酷的蚁群模拟。
创建机器人: 输入下面语句:
local robot = RoboManager.CreateRobot("RobotName") robot.Run()
(也可以简写为:local robot = RoboManager.CreateRobot("RobotName").Run())这段脚本在随机位置创建了一个机器人,这个机器人有已经写好的移动策略:随机设计目标点,实现一种近似的变速随机运动;雷达扫描射击方式:雷达扫描到目标,炮塔转向目标,如果炮塔冷却时间足够。则发射一枚导弹。通过多次执行语句,可以创建多个的机器人进行混战,当然,也可以通过
for i=1,5 do RoboManager.CreateRobot().Run() end
这样的Lua循环来实现一次加入多个机器人,这对于研究群体智能是很方便的。但不建议创建过多的机器人,这样会对渲染带来困难,并且很难观察AI行为。 接着点击执行脚本,也可以直接使用快捷键(Shift + Enter)执行脚本。然后关闭编辑窗口————这个动作不是必要,但它会遮挡住你的机器人。这时候可以看到屏幕上会出现刚才命名的机器人。 这些机器人按照一个既定的AI逻辑在运行,互相攻击。想要清除某个机器人,可以调用
RoboManager.RemoveRobot(id)
这里的id,是显示在机器人名称后面的数字。 这个语句则会删除舞台上面所有的机器人
RoboManager.ClearRobot()
,上面演示了添加删除机器人,那么怎么样得到已经在舞台上的机器人呢?
local robot = RoboManager.GetRobot(id)
这里的robot就是相应ID的机器人。 在上面的例子中可以看到一直在调用RoboManager这个系统给定的类,在游戏中,这个类对机器人进行装配,更换零件,管理,创建,删除,存储,取得等一系列动作。在游戏开发中 类似这种管理器类往往不可缺少。在我们这个系统中,除了这个机器人管理器,还有调度器,地图管理器,输入管理器,动画管理器,消息管理器等等,这些类经常以静态类或者单例存在,集中负责某一方面的功能管理,他们涵盖了游戏的各个方面,使得复杂的游戏系统得以协调统一的运行。 在游戏系统中,有管理器这样起到全局作用的类,也会有机器人这样的在独立域内起作用的类。在上段代码中,最后一句 local robot = RoboManager.GetRobot(id) 就得到了一个机器人。 下面我们来看一个输出机器人名字的例子:
--得到相应ID的机器人 在这里需要把输出窗口打开,和很多编辑器的控制台窗口一样,调用Game.Print()方法输出一些打印信息,对需要换行或者空格的时候,可以使用Game.Print("\t"),Game.Print("\n")。
使用这样的脚本,可以创造出来非常丰富有趣的行为。通过上面的一些代码,基本了解了一下系统是如何工作的。但需要说明的是,机器人的行为和整个系统的运行,远比上面所展现的要复杂的多, 机器人具有一套的装备系统,每个系统都是协调工作的,例如,必须通过雷达扫描取得目标信息,然后炮塔转动到相应方向,才能进行开火。对于静止目标,这个策略是有效的,但对于运动目标,就不够了。另外,开火后,炮塔需要一个冷却时间,在这个时间内是不能够再次开火的。
机器人的运动是遵循物理规律的,唯一能做的就是给机器人输出动力F。通过动力获得加速度,a = F/m ,当前速度和加速度叠加,根据平行四边形法则,进行运动。v = v + a*t,S = v * t,如果你不熟悉这些,恐怕需要温习一下中学物理和数学向量,但请相信,这些不会成为你学习游戏开发的障碍,实际上,创造一个切合物理规律的行为是非常有趣的,会让你的机器人看起来更真实,也会给你更大的成就感,更为重要的是,通过这样一个途径,你会很深入地了解如何在游戏中驱使人物做很复杂但又智能的行为,这一点对于游戏开发至关重要,值得认真研究。
希望这样一个东东能帮助大家逐步了解游戏,我会在后续的教程中逐步公开源码。