碰撞检测又称为冲突检测,是确定精灵之间是否相互冲突的一种方法。碰撞检测用来确定精灵之间何时会发生物理的相互作 用。例如,在游戏中,如果玩家精灵与小飞机精灵发生碰撞,玩家生命值将会降低。碰撞检测就是用来检测玩家与敌方(或子弹)是否发生碰撞的一种机制。在游戏 设计中,有很多种方法可以处理碰撞检测。最简单的方法就是比较每个精灵的矩形边界和其他精灵的矩形边界是否交叉。这种方法效率很高,但是也有一种问题,比 如并不是所有的精灵都是矩形的,当他们相互较近的错过的时候,可能会引起一定程度的错误。可能因为边角的重叠引起冲突,而实际上只是透明区域的重叠。精灵 的形状越不接近矩形,就会有越多的错误类型。可以想象矩形碰撞检测是多么的简单而不够精确,除非本来使用的精灵恰恰是矩形的。对这项技术的一个改进方法就 是将冲突矩形缩小,从而减少错误。这种方法使情况略有改善,但是又有可能引发其他可能的潜在错误,就是允许精灵在某些情况下出现重合而不发出冲突信号。缩 小后的矩形碰撞和简单矩形碰撞一样有效,因为所做的只是比较矩形是否相交。目前最有效的碰撞检测就是根据精灵图像数据来检测碰撞(即像素检测方法),这种 方法实际上不是察看精灵的透明区域是否重合而是精灵图像本身是否重合。在这种情况下,只有当精灵图像重合时,才会获得一个碰撞冲突。这种是理想的碰撞检测 技术,因为其十分的精确,并且对于
任何形状的对象的相互移动都不会发生错误。
 模拟矩 形碰撞检测示意图
如果没有 碰撞检测算法,在本游戏运行过程中,就会出现一种可怕的局面,虽然可以实现背景的移动,以及玩家飞机行驶的效果,而且玩家也可以控制机体的前进方向,但却 会存在一个致使的缺陷——当敌方飞机被我方飞机击中时,没有任何响应,敌方飞机依旧行驶,分值没有任何增加,好像什么都没有发生一样。这都是因为没有为游 戏添加碰撞检测的代码所致。碰撞检测是游戏中经常使用的一种重要算法。由于检测游戏中的两物体是否发生表面接触。例如子弹是否命中敌机,敌机与玩家飞机是 否相撞等。只有进行了碰撞检测才有可能在出现上述情况后将敌机击中,并且分值有所增加等效果。
使用MIDP API来碰撞冲突,可以使用Sprite类中的一系列方法,所有这些方法都叫做collidesWith()。collidesWith()方法包括三种,第一个collidesWith()方法检测的是两个精灵之间的碰撞:
collidesWith(Sprite s,Boolean pixelLevel);
要检测一 个冲突,只要在精灵上调用这个方法,并传入另一个精灵。第2个参数决定了冲突检测是否按照“像素连 着像素”的方法,这就相当于图像数据检测方法。如果只是希望使用简单的矩形检测法在两个精灵之间进行检测,则可以把false值传递给collidesWith()方法。
其余两种 方法分别使用一个图像和一个平铺的图层来检测一个精灵的冲突。在使用图像的情况下,指定了图像的XY位置,并且,碰撞检测在图像和精灵上执行。平铺的图层和精灵相似,但是它使用多个平铺图像来创建一个大 的合成图像,如使用一个平铺图层来创建一个围墙式的迷宫,然后检测它一个精灵的冲突,以确保精灵位于范围之内。
实现碰撞 检测代码如下:
/*判断enemyShip是否被玩家子弹击中*/
    for(int i=0;i<MAX_SHOT;i++)
    {
      for(int j=0;j<MAX_enemyShip;j++)                
      {
        if((playerShot[i].isVisible()) &&
                  (playerShot[i].collidesWith(enemyShip[j],true)))
        {
            
……//碰撞处理

}
}
}

…………

//查看玩家是否与小飞机相撞
                        for(int i=0;i<this.MAX_SP;i++)
                          if(smallPlane[i].isVisible() &&    
                              smallPlane[i].collidesWith(playerSprite,true))
                          {
                            
…………

}

本文出自 “南湖矿工技术空间” 博客,请务必保留此出处http://gaochaojs.blog.51cto.com/812546/187185

转载于:https://www.cnblogs.com/wangtianxj/archive/2010/07/29/1787951.html

J2ME下的游戏精灵的碰撞检测(转)相关推荐

  1. J2ME游戏API 游戏精灵Sprite

    在J2ME手机 游戏开发中,MIDP2.0以上版本提供了一个有助于游戏制作的类,该类称为游戏精灵Sprite,在J2ME中使用游戏精灵Sprite可以简单的管理角色动画使用的frame图像. 以下我将 ...

  2. j2me手机游戏结构分析和实际小例子系列一 游戏背景和游戏精灵

    j2me手机游戏结构分析和实际小例子 一        这段时间一直在忙java的事情,一直在学习用j2me做手机游戏.虽然说我是.net开发人员,但是java语言在很多地方上确实有用于c#的地方(我 ...

  3. java毕业设计——基于java+J2ME的堡垒游戏设计与实现(毕业论文+程序源码)——堡垒游戏

    基于java+J2ME的堡垒游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+J2ME的堡垒游戏设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦. 文章目录: 基于ja ...

  4. Pygame精灵和碰撞检测

    在开始学习相关知识点之前,我们有必要先学习精灵和碰撞检测的含义. 精灵(英文译为 Sprite),其实在一个游戏程序中,精灵本质指的是一张张小尺寸的图片,比如游戏中的各种道具.人物.场景装饰等,它们都 ...

  5. 碰撞检测碰撞Java简单游戏开发之碰撞检测

    最近研究碰撞检测碰撞,稍微总结一下,以后继续补充: 前言 未几之前在论坛上有人发贴,使用java编写的超级马里奥如何实现碰撞检测,笔者自己以前 也做过Tank大战.里面一样涉及到碰撞检测,翻翻U盘里的 ...

  6. 【H5/JS】游戏常用算法-碰撞检测-地图格子算法

    这种算法经常用于RPG(早期的<最终幻想>.<DQ>.<仙剑奇侠传>).SLG(<炎龙骑士团>.<超级机器人大战>).PUZ(<俄罗斯 ...

  7. creator 跳跃弧线_CocosCreator零基础制作游戏《极限跳跃》六、制作游戏障碍物实现碰撞检测...

    CocosCreator零基础制作游戏<极限跳跃>六.制作游戏障碍物实现碰撞检测 前面我们实现了背景和主角的操作,下面我们开始添加游戏的障碍物以及碰撞检测的功能. 一.制作障碍物Prefa ...

  8. (转)CocosCreator零基础制作游戏《极限跳跃》六、制作游戏障碍物实现碰撞检测...

    CocosCreator零基础制作游戏<极限跳跃>六.制作游戏障碍物实现碰撞检测 前面我们实现了背景和主角的操作,下面我们开始添加游戏的障碍物以及碰撞检测的功能. 一.制作障碍物Prefa ...

  9. 【WP7进阶】——XNA游戏精灵放大、旋转、层深度

    游戏很多都是涉及到操纵游戏精灵的相关知识,本篇还是根据游戏精灵的一些常用知识做的学习,下面是本文大纲: 精灵界面居中 精灵放大并且旋转 纹理的层深度 精灵在界面居中 上篇文章我们为游戏添加一个背景图片 ...

最新文章

  1. 关键词提取_NLP 关键词 提取 实战 案例
  2. SAP JAM的dashboard
  3. vue定义global.js,挂载在vue原型上面使用
  4. python自由落体_VPython - example - 模拟自由落体运动
  5. three.js 渲染器更改背景色的几种方法
  6. 类和对象在JVM中是如何存储的,竟然有一半人回答不上来!
  7. Maven学习总结(52)——Maven 配置文件密码加密机制使用说明
  8. LintCode_514 Paint Fence
  9. CORS跨域资源共享
  10. [office]在word中设置分级标题的方法
  11. moment.js 中文API
  12. Color Banding的个人记录
  13. 【游戏行业观察】篇1:成龙与《传奇》:传统网游营销模式的变迁
  14. QLineEdit限制数字输入范围
  15. 小程序点餐系统——点餐列表页(未讲解完)
  16. Windows + Ubuntu20.04双系统详细安装教程
  17. 财务人员的计算机水平怎么描述,财务人员简历怎么写?
  18. 吴恩达机器学习视频学习笔记
  19. 离散数学 第十二章 平面图及其应用
  20. 译文:如何建立EMS服务?

热门文章

  1. android 控件id为0,Android Studio错误:(3,0)未找到ID为“com.android.application”的插件...
  2. Kali Linux安装OpenVAS
  3. 基于图文界面的蓝牙扫描工具btscanner
  4. oracle cache keep pool,请问:alter table ……storage(buffer_pool keep) 与cache的区别
  5. 笔记合并_.NET Core开发实战(第23课:静态文件中间件:前后端分离开发合并部署骚操作)学习笔记(上)...
  6. java调优 视频_Java优化高性能高并发+高并发程序设计视频教程
  7. iOS将数字转成货币格式字符串
  8. 一种通过scout ESI和CNN解码EEG运动想象四分类任务的新方法
  9. 担心GPT-3被喂假消息?谷歌新研究,将知识图谱转成“人话”用于训练丨NAACL 2021...
  10. AI前沿:数据智能产品与技术漫谈