创建Eclipse游戏插件,第3部分: 启动游戏 - 编程入门网
translationx -= delta;
if(translationx < -max)
translationx = -max;
if(translationx > max)
translationx = max;
if(translationy < -max)
translationy = -max;
if(translationy > max)
translationy = max;
}
};
t.scheduleAtFixedRate(tt, 0, 2);
...
首先,添加新的变量并把它们初始化为 false,表示枪在开始时并未移动。然后设置 TimerTask 的 run 方法,根据枪的当前方向 ,加上或减去 translationx 或 translationy。另外,通过限制移动不能超过 x 轴和 y 轴 +/- 极限,限制枪的移动。这样,枪就不会离开原点太远,因为虫子怎么也不会在那里。 碰撞检测 多数计算机游戏都使用某种碰撞检测。在许多情况下,碰撞检测用在一个范围上,好让玩家操纵某个东西在屏幕上移动。在这个游戏中,我们在 BB 弹和虫子之间实现了碰撞检测。 游戏和碰撞检测 如果没有某种形式的碰撞检测,计算机游戏就没有意义,因为没有它游戏就无法对玩家做的 “好事” 作出响应(在这个游戏中,“好事” 指的就是击中了一只虫子)。第一人称射击游戏用许多方式实现碰撞检测,例如可以攻击的墙或身体的一部分,采用某些比其他方式更致命的射击。爆炸也涉及碰撞检测,与大型 BB 弹的功能类似,而且离得越远,受的伤害越小。 碰撞检测实现 实现碰撞检测有多种方法,有些比较复杂。游戏编程对计算机处理能力的消耗很大。在游戏中可做的事情很多,如果同时做这些事,那么游戏会慢下来,甚至不堪忍受。最复杂的碰撞检测方法可以是强力算法,搜索对象表面的每个像素,查看 BB 弹是否击中了它。另一个方法可能是某种非线性函数,检测曲线对象上的碰撞;但是这个方法可能会更复杂。在这个教程中,我们将使用相对简单的碰撞检测。 简单的碰撞检测 为了最大限度地利用这个游戏,在每件事上我们都用最简单的方法,包括碰撞检测。简单方法的好处就是游戏的玩家并不介意碰撞检测是否完美。一个简单的方法是 3 维距离算法,可以用 Bug.RADIUS 进行计算,这样如果一颗 BB 弹进入了虫子的范围,就触发虫子上的 “爆炸”。不过这可能会涉及一个平方函数,这个函数是比较运算密集型的。更好的方法可能是一种简单的 3 维六边形窗口化函数。这个函数需要 BB 弹所在的点,以及虫子位于其中的最小盒子,这样,可以想像有一个看不到的立方体包着虫子。如果 BB 弹进入这个立方体,虫子就被击中了。这一节剩下的部分将实现这个算法。 创建Eclipse游戏插件,第3部分: 启动游戏(7)时间:2011-02-10 IBM Tyler Anderson扩展 Bug 类 为了帮助 Bug 类进行碰撞检测,我们需要添加两个布尔类型的变量,区分活着的、爆炸的和死掉的虫子。这些变量有助于在 Bug 类中保存虫子的状态 —— 这意味着如果虫子是活的,就应当显示并正确地活动。如果虫子爆炸了,就显示为爆炸。如果死掉,就不应当影响游戏或显示。请添加这些状态变量和计时器功能,如清单 15 所示。 清单 15. 扩展 Bug 类的功能
添加了两个布尔变量保存虫子是否爆炸,添加 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |