创建一个 Eclipse 游戏插件,第 3 部分: 启动游戏
2009-12-14 00:00:00 来源:WEB开发网首先,添加新的变量并把它们初始化为 false,表示枪在开始时并未移动。然后设置 TimerTask 的 run 方法,根据枪的当前方向 ,加上或减去 translationx 或 translationy。另外,通过限制移动不能超过 x 轴和 y 轴 +/- 极限,限制枪的移动。这样,枪就不会离开原点太远,因为虫子怎么也不会在那里。
碰撞检测
多数计算机游戏都使用某种碰撞检测。在许多情况下,碰撞检测用在一个范围上,好让玩家操纵某个东西在屏幕上移动。在这个游戏中,我们在 BB 弹和虫子之间实现了碰撞检测。
游戏和碰撞检测
如果没有某种形式的碰撞检测,计算机游戏就没有意义,因为没有它游戏就无法对玩家做的 “好事” 作出响应(在这个游戏中,“好事” 指的就是击中了一只虫子)。第一人称射击游戏用许多方式实现碰撞检测,例如可以攻击的墙或身体的一部分,采用某些比其他方式更致命的射击。爆炸也涉及碰撞检测,与大型 BB 弹的功能类似,而且离得越远,受的伤害越小。
碰撞检测实现
实现碰撞检测有多种方法,有些比较复杂。游戏编程对计算机处理能力的消耗很大。在游戏中可做的事情很多,如果同时做这些事,那么游戏会慢下来,甚至不堪忍受。最复杂的碰撞检测方法可以是强力算法,搜索对象表面的每个像素,查看 BB 弹是否击中了它。另一个方法可能是某种非线性函数,检测曲线对象上的碰撞;但是这个方法可能会更复杂。在这个教程中,我们将使用相对简单的碰撞检测。
简单的碰撞检测
为了最大限度地利用这个游戏,在每件事上我们都用最简单的方法,包括碰撞检测。简单方法的好处就是游戏的玩家并不介意碰撞检测是否完美。一个简单的方法是 3 维距离算法,可以用 Bug.RADIUS 进行计算,这样如果一颗 BB 弹进入了虫子的范围,就触发虫子上的 “爆炸”。不过这可能会涉及一个平方函数,这个函数是比较运算密集型的。更好的方法可能是一种简单的 3 维六边形窗口化函数。这个函数需要 BB 弹所在的点,以及虫子位于其中的最小盒子,这样,可以想像有一个看不到的立方体包着虫子。如果 BB 弹进入这个立方体,虫子就被击中了。这一节剩下的部分将实现这个算法。
更多精彩
赞助商链接