cocos2d-html5 碰撞检測的几种方法

cocos2d-html5 碰撞检測的几种方法

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

游戏中的碰撞还是比較多的,比方角色与角色的碰撞,角色与墙壁的碰撞,角色与怪物的碰撞等,都须要

进行碰撞的检測,来触发一定的事件

近期在尝试制作一个小游戏的时候须要用到碰撞检測,然后就查了下资料,并在论坛进行提问等算是找到了比較惬意的碰撞检測方法,这里记录下来

如今自己知道的方法算是有了三种了,以下一一记录并分析下他们各自的优缺点

1、就是官方提供的,依据getBoundingBox();方法获取要检測的碰撞物体的范围,然后再依据rectIntersectsRect();方法进行推断须要检測的两个精灵是否有重叠,有则发生碰撞;

长处:适合对规则的矩形物体进行检測碰撞,简单,直接

缺点:对于复杂图形不友好,对于碰撞的检測不准确,使用中有种莫名其妙的感觉

var dollRect = sprite.getBoundingBox();
var dollHeadRect = this.catchHand.getBoundingBox();
if(cc.rectIntersectsRect(dollRect, dollHeadRect)){
      //发生碰撞事件
}

2、另外一种是在网上找到的,我感觉有些麻烦,只是相对于第一种,对于不规则物体支持的好了一些

这里依据BoundingBox 的 上下左右的中间点来推断碰撞,使检測的更准确一些

长处:使碰撞检測更准确一点

缺点:麻烦

    var box1 = sprite1.getBoundingBox();
    var bottom = cc.p(box1.x +box1.width / 2,box1.y);
    var right = cc.p(box1.x +box1.width,box1.y +box1.height / 2);
    var left = cc.p(box1.x,box1.y +box1.height / 2);
    var top = cc.p(box1.x + box1.width / 2,box1.y + box1.height);


     var box2 = sprite2.getBoundingBox();
     if(cc.rectContainsPoint(box2, left)||cc.rectContainsPoint(box2, right)||cc.rectContainsPoint(box2, top)||cc.rectContainsPoint(box2, bottom)){
          //发生碰撞
     }

3、第三种就是我如今使用的,只是这个针对大小比較规矩,即接近正方形比較好,可是对于外形能够复杂

这个碰撞检測就是要给精灵加入一个radius属性,设置精灵以中心为原点,radius为半径的碰撞区域,然后去推断两个精灵的中心点的距离是否小于radius之和,假设是则发生碰撞;

长处:更准确,简单

缺点:对于长的图片碰撞不友好

想推断距离首先要知道一个方法:pDistance();这种方法是cocos2d-html5获取两个坐标点之间的方法,使用这种方法我们就能够获取两个精灵中心的距离

     var sprite = this.dolls3[i];
     var distance = cc.pDistance(this.catchHand.getPosition(), sprite.getPosition());
     var radiusSum = sprite.radius + this.catchHand.radius;
     cc.log("distance:" + distance + "; radius:" + radiusSum);
     if(distance < radiusSum){
         //发生碰撞
     }


     //针对第三三种方法又加深了一下,使得对矩形类的精灵也能有好的推断,
     //主要就是分别对X和Y方向设置不同的Radius,然后去进行分别推断
     var distanceX = Math.abs(this.catchHand.getPositionX() - sprite.getPositionX());
     var distanceY = Math.abs(this.catchHand.getPositionY() - sprite.getPositionY());
     var radiusYSum = sprite.radiusY + this.catchHand.radius;
     if(distanceX < sprite.radiusX && distanceY < radiusYSum){
         this.catchDollSucceed(sprite);
         return;
     }

总结:综上所述,碰撞检測的方法不止一种,(应该还有其它的方法是我不知道的)在适合的时候选择合适的方法才是最好的,

很多其它cocos2d-html5开发文章能够关注牛人 touchsnow的博客:http://blog.makeapp.co

也能够去我的个人博客网站:Melove 我爱http://www.melove.net

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117922.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • jieba库分词代码_怎么下载jieba库

    jieba库分词代码_怎么下载jieba库jieba库概述(jieba是优秀的中文分词第三分库)中文文本需要通过分词获得单个的词语jieba是优秀的中文分词第三方库,需要额外安装jieba库提供三种分词模式,最简单只需要掌握一个函数jieba库的安装(cmd命令行)pipinstalljieba(导入)importjieba(查看版本)jieba.__version__jieba分词的原理(jieba分词依靠…

    2022年9月21日
    4
  • 决策树原理及使用_虹吸原理图解

    决策树原理及使用_虹吸原理图解1.树模型和线性模型的区别树形模型是一个一个特征进行处理线性模型是所有特征给予权重相加得到一个新的值2.什么是决策树所谓决策树,就是一个类似于流程图的树形结构,树内部的每一个节点代表的是对一个特征的测试,树的分支代表该特征的每一个测试结果,而树的每一个叶子节点代表一个类别。树的最高层是就是根节点。下图即为一个决策树的示意描述,内部节点用矩形表示,叶子节点用椭圆表示。3.学习过程**特征选择:**特征选择是指从训练数据中众多的特征中选择一个特征作为当前节点的分裂标准,如何选

    2025年9月5日
    6
  • node gyp rebuild_running setup.py install for

    node gyp rebuild_running setup.py install for一、安装node-gypnpminstall-gnode-gyp二、若安装node-gyp后无法使用1、切换至root账户2、添加环境变量的路径:修改/etc/profilevi/etc/profile在底部加入exportPATH=/opt/node/bin:/opt/node/lib/node_modules/npm/bin/node-gyp-bin:$PATH…

    2025年11月2日
    3
  • python的input格式_javascript设计模式与开发实践 pdf

    python的input格式_javascript设计模式与开发实践 pdffileinput模块可以对一个或多个文件中的内容进行迭代、遍历等操作。该模块的input()函数有点类似文件readlines()方法,区别在于:前者是一个迭代对象,即每次只生成一行,需要用for循环迭代。后者是一次性读取所有行。在碰到大文件的读取时,前者无疑效率更高效。用fileinput对文件进行循环遍历,格式化输出,查找、替换等操作,非常方便。【典型用法】importfileinputf…

    2022年5月3日
    57
  • django使用celery_django serializers

    django使用celery_django serializers前言环境celery==5.0.2在安装完celery后,运行celery会报以下错误ModuleNotFoundError:Nomodulenamed'click._bashc

    2022年7月30日
    5
  • 【优化算法】粒子群优化算法简介[通俗易懂]

    【优化算法】粒子群优化算法简介[通俗易懂]粒子群优化算法(ParticleSwarmOptimization,PSO)简介。

    2022年10月11日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号