在cocos2dx中进行矩形的碰撞检测时需要对旋转过的矩形做碰撞检查,由于游戏没有使用Box2D等物理引擎,所以采用了OBB(Oriented bounding box)方向包围盒算法,这个算法是基于SAT(Separating Axis Theorem)分离轴定律的. 分离轴定律:两个凸多边形物体,如果我们能找到一个轴,使得两个在物体在该轴上的投影互不重叠,则这两个物体之间没有碰撞发生,该轴为Separating Axis.也就是说两个多边形在所有轴上的投影都发生重叠,则判定为碰撞:否则,没有…
怎样进行2D旋转矩形的碰撞检測.能够使用一种叫OBB的检測算法(Oriented bounding box)方向包围盒.这个算法是基于SAT(Separating Axis Theorem)分离轴定律的.而OBB不不过计算矩形的碰撞检測.而是一种算法模型. 简单解释一下概念,包围盒和分离轴定律. 包围盒:是依据物体的集合形状.来决定盒子的大小和方向,这样能够选择最紧凑的盒子来代表物体.见下图 黑色的就是包围盒,能够是凸多边形,最贴近检測物体就可以. 分离轴定律:两个凸多边形物体,假设我们能找到一…
本来想画个图演示一下,但是折腾了一会发现画不好,我的win10系统没有安装office,以后再看的话再补上吧.不废话了. 如图所以,如果判断点P是否被矩形A所包含,非常容易.那么如果矩形A以中心点逆时针旋转30度呢?有兴趣的同学可以去研究一下OBB算法,应该会有一些思路.我个人的思路是矩形A以中心点逆时针旋转30度,相当于点P以矩形A的中心点顺时针旋转30度,那么就相当于判断点D是否被矩形A包含,这就是我们熟悉的判断方法了.那么如何求出旋转后的D点的坐标呢, 这里我是用仿射变化的方法,如果还记得…
在游戏中我们通常会涉及到两个精灵之间的碰撞的计算,那么在Cocos2d-x里面我们通常会用矩形碰撞检测来计算两个精灵在运动的过程中是否碰撞到了.原理很简单,就是当运动的时候通过精灵的矩形坐标进行遍历来计算精灵之间是否有重合,如果有重合那就证明是碰撞上了. 下面看一下下面的例子: Ball精灵会根据帧速率来进行运动的,下面是Ball精灵的实现代码: #ifndef _BALL_H_ #define _BALL_H_ #include "cocos2d.h" /* 创建一个球的精灵 */…
var EventHandle = { addEvent:function(ele,type,handle){ if (ele.addEventListener) { ele.addEventListener(type,handle,false); }else if(attachEvent){ ele.attachEvent("on"+type,handle); }else{ ele["on"+type]=handle; } }, deleteEvent:funct…
可缩放矢量图形(英语:Scalable Vector Graphics,SVG)是基于可扩展标记语言(XML), 用于描述二维矢量图形的一种图形格式.SVG由W3C制定,是一个开放标准. 在 Internet Explorer 10(Quirks 和 IE10 文档模式)中,矢量标记语言 (VML) 已过时. 如有疑问请参考:http://msdn.microsoft.com/zh-cn/library/ie/hh801223 更多疑问请参考:http://zh.wikipedia.org/wi…
http://stackoverflow.com/questions/7328424/point-in-obb-oriented-bounding-box-algorithm Given a center point, width, height and angle forming an OBB, how can I find if a given point P is inside the OBB? I take it that the wrinkle in your problem is t…
1. iOS有四个方向的旋转,为了保证自己的代码能够支持旋转,我们必须首先处理一个函数: - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return YES; } 2. 这个函数时用来确定我们的应用所支持的旋转方向.如果想要支持每个方向则直接返回YES就行,还可以单独判断某一方向: - (BOOL)shouldAutorotateToInterfaceOr…
题目地址:http://ac.jobdu.com/problem.php?pid=1386 题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1. 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入的第一行为一个整数n(1<= n<=1000000):代表旋转数组的元素个数. 输入的第二行包括n个整数,其中每个整数a的范…
一,原理介绍 这回有点复杂,不过看懂了还是很好理解的.当然,我不敢保证这种算法在任何情况下都会起效果,如果有同学测试时,发现出现错误,请及时联系我. 我们首先来建立一个以圆心为原点的坐标系: 然后要检测碰撞就只有两种情况了. 情况一,矩形全部都在一个象限内,如图: 当然,图中只是举个例子,不一定是只在第二象限,任何一个象限都行,只要是矩形全在该象限. 这种情况比较好解决,首先,我们计算出矩形每个角的坐标,然后用勾股定律依次算出这个角到圆心的距离是否小于或者等于半径.设这个角与圆心横坐标之差为d1…