快速业务通道

创建Eclipse游戏插件,第3部分: 启动游戏 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
了一个计时器,用来显示 “POW” 文本,并让虫子消失。现在我们学习在哪里放置碰撞检测的代码。

在哪里检测

既然已经知道了在碰撞检测中要做什么,现在就要把检测碰撞的代码添加到某个地方。可以把代码添加到虫子或 BB 弹(子弹)上。但是,子弹通常比虫子多,所以我们在 Bullet 类的计时器任务中做这件事,如清单 16 所示。

清单 16. 子弹负责检测是否击中了虫子

public void shoot(float tGunX, float tGunY){ ...        tt = new TimerTask(){          public void run(){            translation-=0.1;            for(int j = 0; j < game.bugs.length; j++){              if(!game.bugs[j].blowUp && !game.bugs[j].dead)                game.bugs[j].checkShot(Bullet.this);            }            if(translation < -100){ ...

我们循环检查每个虫子,如果虫子没爆炸,也没死,就调用 checkShot,检查是否击中了它。下面来实现这个方法。

实现最简单的碰撞检测

现在进入碰撞检测算法的实质部分。checkShot 算法检测 BB 弹是否进入了虫子所在的立方体(如前所述)。请把这个方法添加到 Bug 类,如清单 17 所示。

清单 17. 虫子和 BB 弹之间的核心碰撞检测算法

public void checkShot(Bullet b){        // position of end closest to the gun        float bx = b.ox + b.translationGunX;        float by = b.oy + b.translationGunY;        float bz = b.oz + b.translation;        // center point of the circle        float x = ox;        float y = oy;        float z = oz;        // 3-dimensional window of the bug        float x1 = x - RADIUS;        float x2 = x + RADIUS;        float y1 = y - RADIUS;        float y2 = y + RADIUS;        float z1 = z - RADIUS;        float z2 = z + RADIUS;        // if the bullet is inside the bug, he''s going to blow up         if(bx > x1 && bx < x2)          if(by > y1 && by < y2)            if(bz > z1 && bz < z2)              blowUp = true;      }

首先,得到 BB 弹的确切(x, y, z)位置,然后得到虫子的中心点。接下来,通过加/减虫子的半径(在 Bug.RADIUS 中定义)得到构成立方体的六个点,每个轴两个点。现在有了必要的值,可以判断点(x, y, z)是否在虫子所在的立方体之中。如果正在检测沿着 x 轴的碰撞,那么在 x1 和 x2 之间(可以用 bx > x1 && bx < x2 计算)的虫子就会触发碰撞。对于其他两个轴,y 和 z 轴也如法炮制,这样就会知道 BB 弹是否落入虫子的范围内,并把布尔变量 blowup 设为 true。下一节介绍如何处理这个工作和启用破坏虫子的动画。

创建Eclipse游戏插件,第3部分: 启动游戏(8)

时间:2011-02-10 IBM Tyler Anderson

破坏虫子

如果我们击中了虫子,就需要触发让它爆炸的动画,显示 “POW” 文本,然后消失。

响应用户输入和事件

如果开枪击中,而被击中的对象什么也没发生,那么游戏不会让人兴奋和上瘾。所以,在游戏中对事件响应的方式要使游戏更兴奋、更好玩。在这个游戏中,我们要让虫子爆炸,显示 &ldqu

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号