这里总结一下点、圆、矩形之间的简单碰撞检测算法(矩形不包括旋转状态)

点和圆的碰撞检测:

1.计算点和圆心的距离

2.判断点与圆心的距离是否小于圆的半径

isCollision: function(point, circle)
{
//点与圆心的距离
var distance = Math.sqrt(Math.pow(point.x - circle.x, 2) + Math.pow(point.y - circle.y, 2)); //圆的半径
var radius = circle.getContentSize().width / 2; //如果点与圆心距离小于圆的半径,返回true
if(radius > distance)
{
return true;
}
else
{
return false;
}
}

点和矩形的碰撞检测:

1.获取矩形的左上角坐标p1和右下角坐标p2

2.判断点p的x坐标是否在p1和p2的x坐标之间,并且p的y坐标是否在p1和p2的y坐标之间

isCollision: function(point, rect)
{
//获得矩形的左上角坐标p1和右下角坐标p2
var p1 = cc.p(rect.x - rect.width/2, rect.y + rect.height/2);
var p2 = cc.p(rect.x + rect.width/2, rect.y - rect.height/2); //判断点p的x坐标是否大于p1的x坐标,并且小于p2的x坐标,并且p的y坐标大于p2的y坐标,并且小于p2的y坐标
if(point.x > p1.x && point.x < p2.x && point.y > p2.y && point.y < p1.y)
{
return true;
}
else
{
return false;
}
}

圆和圆的碰撞检测:

1.计算两圆的圆心距

2.判断圆心距是否小于两圆的半径之和

isCollision: function(circle1, circle2)
{
//圆心与圆心的距离
var distance = Math.sqrt(Math.pow(circle1.x - circle2.x, 2) + Math.pow(circle1.y - circle2.y, 2)); //圆心半径
var r1 = circle1.getContentSize().width / 2;
var r2 = circle2.getContentSize().width / 2; //如果圆心与圆心距离小于两圆的半径,返回true
if(r1 + r2 > distance)
{
return true;
}
else
{
return false;
}
}

矩形和矩形的碰撞检测:

1.在水平方向上,判断两个矩形中点x坐标的距离是否小于两个矩形宽度的一半之和

2.在垂直方向上,判断两个矩形中点y坐标的距离是否小于两个矩形高度的一半之和

isCollision: function(rect1, rect2)
{
//获取矩形1的宽高
var width1 = rect1.width;
var height1 = rect1.height; //获取矩形2的宽高
var width2 = rect2.width;
var height2 = rect2.height; var flag;
if(rect1.x >= rect2.x && rect2.x <= rect1.x - width1/2 - width2/2)
{
flag = false;
}
else if(rect1.x <= rect2.x && rect2.x >= rect1.x + width1/2 + width2/2)
{
flag = false;
}
else if(rect1.y >= rect2.y && rect2.y <= rect1.y - height1/2 - height2/2)
{
flag = false;
}
else if(rect1.y <= rect2.y && rect2.y >= rect1.y + height1/2 + height2/2)
{
flag = false;
}
else
{
flag = true;
}
}

圆和矩形的碰撞检测:

isCollision: function(circle, rect)
{
//圆的半径
var radius = circle.width / 2; //圆形中心与矩形中心的相对坐标
var x = circle.x - rect.x;
var y = circle.y - rect.y; var minX = Math.min(x, rect.width/2);
var maxX = Math.max(minX, -rect.width/2);
var minY = Math.min(y, rect.height/2);
var maxY = Math.max(minY, -rect.height/2); if((maxX - x) * (maxX - x) + (maxY - y) * (maxY - y) <= radius * radius)
{
return true;
}
else
{
return false;
}
}

cocos2d-Js 各类碰撞检测的更多相关文章

  1. cocos2d js jsb XMLHttpRequest 中文乱码

    1.首先讲下怎样使用XMLHttpRequest 下面所说的是在cocos2d-x 2.2.2 或者 2.3 版本号中. 首先要明确cocos2d js事实上分两个版本号,一个是html5的版本号,另 ...

  2. cocos2d js的一些tip

    cocos2d-js-v3.2-rc0 cc.director.end();//退出app cc.Application.getInstance().openURL("http://www. ...

  3. cocos2d js ClippingNode 制作标题闪亮特效

    1.效果图: 之前在<Android 高仿 IOS7 IPhone 解锁 Slide To Unlock>中制作了文字上闪亮移动的效果,这次我们来看下怎样在cocos2d js 中做出类似 ...

  4. cocos2d-x JS 各类点、圆、矩形之间的简单碰撞检测

    这里总结了一下点.圆.矩形之间的简单碰撞检测算法 (ps:矩形不包括旋转状态) 点和圆的碰撞检测: 1.计算点和圆心的距离 2.判断点与圆心的距离是否小于圆的半 isCollision: functi ...

  5. Cocos2d Box2D之碰撞检测

    |   版权声明:本文为博主原创文章,未经博主允许不得转载. 在Box2D中碰撞事件由b2ContactListener类函数实现,b2ContactListener是Box2D提供的抽象类,它的抽象 ...

  6. js各类共用方法

    function GetParameterValueByName(parametername) { var reg = new RegExp("(^|&)" + param ...

  7. cocos2d.js

    1.节点是Cocos2d最基础的东西 2.坐标与普通数学坐标一致 3.children属性表示节点的孩子,父节点位置变化,它包含的子节点也会跟着变化,以整体的形势移动 4.层(layer), 新建层: ...

  8. cocos2d JS 源生js实现each方法

    javascript笔记——源生js实现each方法   出处:http://www.lovejavascript.com/#!zone/blog/content.html?id=48 jquery里 ...

  9. cocos2d JS 错误异常抛出捕获和崩溃拦截

    Error对象 一旦代码解析或运行时发生错误,JavaScript引擎就会自动产生并抛出一个Error对象的实例,然后整个程序就中断在发生错误的地方. Error对象的实例有三个最基本的属性: nam ...

  10. cocos2d JS 在 JavaScript 中,怎样把一个对象转化成 JSON 字符串?

    为什么今天要做这样子的操作,原因很简单,因为cocos JS 的本地缓存储存不了对象,所以当我通过本地缓存的 key和value来取值的时候就取不出来来,json的消息数据是一个对象来的,然而在做牌局 ...

随机推荐

  1. ImGui界面优化:使用图标字体、隐藏主窗口标题栏

    目录 使用图标字体 扩展:内存加载字体 隐藏主窗口标题栏 增加程序退出 改进HideTabBar 窗口最大化 总结 本文主要介绍ImGui应用中的一些界面优化方法,如果是第一次使用ImGui推荐从上一 ...

  2. P3378 【模板】二叉堆

    [洛谷]P3378 [模板]堆 方法一 手写堆 最小堆插入 从新增的最后一个结点的父结点开始,用要插入元素向下过滤上层结点(相当于要插入的元素向上渗透) void siftdown(int i) // ...

  3. Java日志框架的依赖设置备查(SLF4J, Log4j, Logback)

    前言 最近在看代码的过程中,发现身边的许多人在使用Java日志框架时,对于应该引入何种依赖不甚了解,搜索网络上的文章,常常也是互不一致.这篇文章可以看着是Java日志框架的入门使用和实践建议,重点介绍 ...

  4. 想让你的工作轻松高效吗?揭秘Java + React导出Excel/PDF的绝妙技巧!

    前言 在B/S架构中,服务端导出是一种高效的方式.它将导出的逻辑放在服务端,前端仅需发起请求即可.通过在服务端完成导出后,前端再下载文件完成整个导出过程.服务端导出具有许多优点,如数据安全.适用于大规 ...

  5. 小米云原生文件存储平台化实践:支撑 AI 训练、大模型、容器平台多项业务

    小米作为全球知名的科技巨头公司,已经在数百款产品中广泛应用了 AI 技术,这些产品包括手机.电视.智能音箱.儿童手表和翻译机等.这些 AI 应用主要都是通过小米的深度学习训练平台完成的. 在训练平台的 ...

  6. [自然语言处理] 基于pycorrector实现文本纠错

    文本纠错(Text Error Correction)技术旨在自动修正输入文本中的拼写.语法.标点符号等错误,以提高文本的准确性.通顺性和规范性.该技术可以通过自然语言处理技术实现,基于上下文和语言规 ...

  7. Oracle CloudWorld 2022 - 使用Oracle MAA实现应用程序的连续可用性

    每每谈到Oracle MAA,大家条件反射般就会想到Oracle的RAC和ADG等核心选件,当然,这些技术有口皆碑,也的确是MAA的构建基础,但本文我们不再过多谈这些耳熟能详的技术,而是来跟大家探讨下 ...

  8. 形象描绘TCP三次握手和四次挥手

    一.TCP三次握手TCP 三次握手就好比两个人在街上隔着50米看见了对方,但是因为雾霾等原因不能100%确认,所以要通过招手的方式相互确定对方是否认识自己.形象描绘TCP三次握手和四次挥手 张三首先向 ...

  9. CIC滤波器仿真与实验过程及结果记录

    整理于2023-10-08 0.0 前言: 前面介绍了使用matlab中的Filter Designer工具箱进行CIC抽取滤波器设计的仿真过程与结果.下面在前面的基础上针对现有的[正点原子ZYNQ] ...

  10. CSS 多行文本超链接下划线动效

    先看效果 乍一看,是不是感觉很简单,仔细一瞅发现事情好像没有那么简单. 如果十分钟还没想出怎么实现,那就把简历上的"精通css"改成"了解css"-- 大部分人 ...