《《Android游戏编程之从零开始》第四章样章》.pdf

《《Android游戏编程之从零开始》第四章样章》.pdf

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《《Android游戏编程之从零开始》第四章样章》.pdf

4.14 碰撞检测 手机游戏开发中最常用到三种检测碰撞的方式,分别是:矩形碰撞、圆形碰撞和像素碰 撞。实际上,与其说是三种碰撞检测方式倒不如说是两种,其原因会在最后介绍像素碰撞时 详细阐述。 1 4.14.1 矩形碰撞 所谓矩形碰撞就是利用两个矩形之间的位置关系来进行判断,如果一个矩形的像素在另 外一个矩形之中,或者之上都可以认为这两个矩形发生了碰撞。 如果单纯去考虑哪些情况会判定两个矩形发生碰撞,倒不如反思维考虑两个矩形之间不 发生碰撞的几种情况,这样更容易想到。其实两个矩形不发生碰撞的情况就四种,如图 4-47 所示。 图4-47 矩形不发生碰撞的四种情况 图 4-47 示意了两个矩形之间永不会发生碰撞的四种情况。下面通过一个实例项目来完 成对应的四种判定。 新建项目“RectCollision ”,游戏框架为 SurfaceView 游戏框架,项目对应的源代码为 4-14-1 MySurfaceView “ (矩形碰撞)”。首先修改 类如下: //定义所需的变量: //定义两个矩形的宽高坐标 private int x1 = 10, y1 = 110, w1 = 40, h1 = 40; private int x2 = 100, y2 = 110, w2 = 40, h2 = 40; //便于观察是否发生了碰撞设置一个标识位 private boolean isCollsion; //然后修改绘图函数: public void myDraw () { ... //判断是否发生了碰撞 if (isCollsion) {//发生碰撞 paint.setColor(Color.RED ); paint.setTextSize(20); canvas.drawText(Collision , 0, 30, paint); ! } else {//没发生碰撞 paint.setColor(Color.WHITE); } //绘制两个矩形 canvas.drawRect(x1, y1, x1 + w1, y1 + h1, paint); canvas.drawRect(x2, y2, x2 + w2, y2 + h2, paint); 2 ... } 上面代码中,isCollsion 这个变量的存在主要是区分未碰撞和已碰撞。当发生碰撞时 (isCollsion 为真),不仅改变了画笔的颜色,还绘制了一句文本信息。绘制文本的原因是 因为在书中只显示黑白两色,效果不明显,为了让大家从项目截图中明显的看出其区别而添 加的。 两个矩形默认坐标和宽高值是无法发生碰撞的,所以这里需要对其中一个矩形跟随触屏 点进行移动操作,这个操作在触屏事件监听函数中实现: public boolean onTouchEvent(MotionEvent event) { //让矩形 1 随着触屏位置移动(触屏点设为此矩形的中心点) x1 = (int) event.getX() - w1 / 2; y1 = (int) event.getY() - h1 / 2; //当矩形之间发生碰撞 if (isCollsionWithRect(x1, y1, w1, h1, x2, y2, w2, h2)) { isCollsion = true;//设置标识位为真 //当矩形之间没有发生碰撞 } else { isCollsion

您可能关注的文档

文档评论(0)

wgvi + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档