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的消息数据是一个对象来的,然而在做牌局 ...
随机推荐
- Programming abstractions in C阅读笔记:p127-p129
<Programming Abstractions In C>学习第51天,p127-p129,总结如下: 一.技术总结 1. string library 掌握常用函数如strlen,s ...
- 一次Java内存占用高的排查案例,解释了我对内存问题的所有疑问
原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,非公众号转载保留此声明. 问题现象 7月25号,我们一服务的内存占用较高,约13G,容器总内存16G,占用约85%,触发了内存报警(阈值8 ...
- Shiro配置类中的各个配置项浅谈
背景: 上文中在落地实践时,对Shiro进行了相关的配置,并未对其含义作用进行详细学习,本章将进一步详解其作用含义. Shiro配置类中的各个配置项的作用: @Bean public Security ...
- 谷粒商城微服务分布式高级篇:linux下使用docker安装ElasticSearch
[root@localhost ~]# docker pull elasticsearch:7.8.0 安装elasticsearch:7.8.0[root@localhost ~]# docker ...
- MongoDB 中使用 explain 分析创建的索引是否合理
MongoDB 中如何使用 explain 分析查询计划 前言 查询计划 explain explain 1.queryPlanner 2.executionStats 3.allPlansExecu ...
- 每日一题:vue3自定义指令大全(呕心沥血所作,附可运行项目源码)
1.VUE常用指令大全 本项目所有指令均为全局注册,使用时直接在组件中使用即可. 指令目录:src/directives 页面目录:src/views 具体可查看源码 1.1 权限指令 封装一个权限指 ...
- Llama2-Chinese项目:3.2-LoRA微调和模型量化
提供LoRA微调和全量参数微调代码,训练数据为data/train_sft.csv,验证数据为data/dev_sft.csv,数据格式为"<s>Human: "+ ...
- MySQL系列之MHA高可用——主从复制架构演变介绍、高可用MHA、管理员在高可用架构维护的职责
文章目录 1. 主从复制架构演变介绍 1.1 基本结构 1.2 高级应用架构演变 1.2.1 高性能架构 1.2.2 高可用架构 2. 高可用MHA ***** 2.1 架构工作原理 2.2 架构介绍 ...
- Node.js中常用的设计模式有哪些?
本文由葡萄城技术团队首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 设计模式简介 设计模式是由经验丰富的程序员在日积月累中抽象出的用以解决通用问题的可 ...
- CF1190C Tokitsukaze and Duel
搬运一下本喵的 lg 博客 qwq 详细讲一下如何判定后手能否获胜,对其他题解做个补充.(蒟蒻的我想了好久来着 此题的关键点在于可以重复上一个人的操作使局面保持不变. 考虑先手的获胜条件,由上一段可知 ...