cocos2d-Js 各类碰撞检测
这里总结一下点、圆、矩形之间的简单碰撞检测算法(矩形不包括旋转状态)
点和圆的碰撞检测:
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 各类碰撞检测的更多相关文章
- cocos2d js jsb XMLHttpRequest 中文乱码
1.首先讲下怎样使用XMLHttpRequest 下面所说的是在cocos2d-x 2.2.2 或者 2.3 版本号中. 首先要明确cocos2d js事实上分两个版本号,一个是html5的版本号,另 ...
- cocos2d js的一些tip
cocos2d-js-v3.2-rc0 cc.director.end();//退出app cc.Application.getInstance().openURL("http://www. ...
- cocos2d js ClippingNode 制作标题闪亮特效
1.效果图: 之前在<Android 高仿 IOS7 IPhone 解锁 Slide To Unlock>中制作了文字上闪亮移动的效果,这次我们来看下怎样在cocos2d js 中做出类似 ...
- cocos2d-x JS 各类点、圆、矩形之间的简单碰撞检测
这里总结了一下点.圆.矩形之间的简单碰撞检测算法 (ps:矩形不包括旋转状态) 点和圆的碰撞检测: 1.计算点和圆心的距离 2.判断点与圆心的距离是否小于圆的半 isCollision: functi ...
- Cocos2d Box2D之碰撞检测
| 版权声明:本文为博主原创文章,未经博主允许不得转载. 在Box2D中碰撞事件由b2ContactListener类函数实现,b2ContactListener是Box2D提供的抽象类,它的抽象 ...
- js各类共用方法
function GetParameterValueByName(parametername) { var reg = new RegExp("(^|&)" + param ...
- cocos2d.js
1.节点是Cocos2d最基础的东西 2.坐标与普通数学坐标一致 3.children属性表示节点的孩子,父节点位置变化,它包含的子节点也会跟着变化,以整体的形势移动 4.层(layer), 新建层: ...
- cocos2d JS 源生js实现each方法
javascript笔记——源生js实现each方法 出处:http://www.lovejavascript.com/#!zone/blog/content.html?id=48 jquery里 ...
- cocos2d JS 错误异常抛出捕获和崩溃拦截
Error对象 一旦代码解析或运行时发生错误,JavaScript引擎就会自动产生并抛出一个Error对象的实例,然后整个程序就中断在发生错误的地方. Error对象的实例有三个最基本的属性: nam ...
- cocos2d JS 在 JavaScript 中,怎样把一个对象转化成 JSON 字符串?
为什么今天要做这样子的操作,原因很简单,因为cocos JS 的本地缓存储存不了对象,所以当我通过本地缓存的 key和value来取值的时候就取不出来来,json的消息数据是一个对象来的,然而在做牌局 ...
随机推荐
- 推荐几款三维模型OBJ格式轻量化处理工具软件
推荐几款三维模型OBJ格式轻量化处理工具软件 以下是几款常用的三维模型OBJ格式轻量化处理软件的介绍: 1.MeshLab: MeshLab是一款免费且强大的开源三维模型处理软件,支持多种文件格式,包 ...
- 超全技术学习资料PDF分享
技术学习资料分享,目前共20G,持续更新... Java学习资料: 大数据Hadoop: 这里不一一截图了,资源持续更新中. 关注下面公众号进行下载.
- 如何将GitLab仓库同步到GitHub和Gitee?
作者:西瓜程序猿 主页传送门:https://www.cnblogs.com/kimiliucn 前言 在之前写的[Kimi.RocketMQ.NET]开源项目中,代码我是放在自己搭建的GitLab服 ...
- vue中watch侦听器,deep和immediate的用法
1.deep深度监听的用法 当监听一个对象时,可能想监听整个对象的变化,而不仅仅是某个属性.但在默认情况下,如果你正在监听formData对象并且修改了formData.username,对应的侦听器 ...
- Strimzi Kafka Bridge(桥接)实战之二:生产和发送消息
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是<Strimzi Kafka B ...
- LogicFlow 是一款流程图编辑框架
简体中文 | English LogicFlow 是一款流程图编辑框架,提供了一系列流程图交互.编辑所必需的功能和简单灵活的节点自定义.插件等拓展机制,方便我们快速在业务系统内满足类流程图的需求. 特 ...
- MySQL快速导入千万条数据(3)
目录 一.测试环境 二.命令行导入方式 三.LOAD DATA导入方式 四.结论 接上文,本次在较高性能的X86物理机上,做真实生产环境的大数据量导入测试. 一.测试环境 ■ CPU是24核,每核2线 ...
- 2D物理引擎 Box2D for javascript Games 第四章 将力作用到刚体上
2D物理引擎 Box2D for javascript Games 第四章 将力作用到刚体上 将力作用到刚体上 Box2D 是一个在力作用下的世界,它可以将力作用于刚体上,从而给我们一个更加真实的模拟 ...
- 从零用VitePress搭建博客教程(4) – 如何自定义首页布局和主题样式修改?
接上一节:从零用VitePress搭建博客教程(3) - VitePress页脚.标题logo.最后更新时间等相关细节配置 六.首页样式修改 有时候觉得自带的样式不好看,想自定义,首先我们在docs/ ...
- Memcached的基本操作
一.Memcache使用场景1.非持久化存储:对数据存储要求不高2.分布式存储:不适合单机使用3.key/value存储:格式简单,不支持list,array数据格式二.系统类$m=new Memca ...