
算法收集
文章平均质量分 69
luckzzs
这个作者很懒,什么都没留下…
展开
-
基于2D多边形的碰撞检测和响应(一)
简介本文是阐述如何在2D动作游戏中进行精确而高效的碰撞检测。这里的碰撞是基于多边形而不是基于精灵的。这两者之间在设计上会有不同。基于精灵的碰撞检测是通过精灵之间的重叠的像素来完成的。而多边形使用向量数学来精确计算交点,时间和碰撞方向。虽然多边形仅仅是精灵的一个近似,但是它比精灵系统要高级。可以精确模拟逼真的简单物理学,例如反弹,摩擦,斜面的滑行 碰撞检测可以更精确的用于高速精...原创 2010-11-16 19:57:10 · 197 阅读 · 0 评论 -
像素级碰撞算法1
boolean isCollisionPolygon(int[] xPoints, int[] yPoints, int posx, int posy) { int i, j; int y; int miny, maxy; int x1, y1; int x2, y2; int ind1, ind2; int ints; ...原创 2010-11-16 20:12:13 · 174 阅读 · 0 评论 -
XNA中关于2D图形像素碰撞
下面所介绍的例子是微软官方的一个例子,这里给出下载XNA官方2D像素碰撞例子的链接。 在这个例子中没有涉及到什么新鲜的技术,主要是利用提取图像的像素,然后根据两张图像画布相交的范围构造一个小范围的矩形框,之后遍历此矩形框中的每一个像素点,判断当前遍历到的像素点的alpha值是否为零,若两张图片同一个像素点的alpha值同时不为零,则两张图片碰撞,反之则没有进行碰撞。好了,不罗嗦了,下面...原创 2010-11-16 20:05:32 · 150 阅读 · 0 评论 -
子弹跟踪算法2
很多玩过飞行射击类游戏的朋友都对跟踪导弹印象深刻,手中有这样一款武器常常能够战无不胜,但是敌人射出的导弹则可能成为玩家的噩梦。其实实现导弹跟踪的方法并不复杂,只需要一些简单的平面解析几何知识就可以做到。算法分析假设导弹旋转角速度为omega,运动速度为v。下图显示了导弹和目标在坐标轴中的初始状态。初始时刻,目标与导弹的运动方向都是-Y,位置分别为(x1,y1),(x2,y2),连...原创 2010-11-16 20:04:58 · 834 阅读 · 0 评论 -
子弹跟踪算法1
首先,本文讨论的是很简单的算法。高手莫入。在飞行射击游戏中,恐怕没有一个游戏不用到跟踪算法的。比如在玩街机的时候,是不是经常挂于BOSS的“跟踪弹”?这是怎样实现的呢?很简单,只要有高中的一点数学知识就行了!首先回忆几个三角函数sin,cos,tan(tg),arctan(arctg)sin(x)—对边/斜边。在1,2项限为正,3,4项限为负cos(x)—邻边/斜边。在1,4项...原创 2010-11-16 20:04:21 · 2298 阅读 · 0 评论 -
卡马克地图缓冲图大小计算方法
背景缓冲的大小背景缓冲图像的大小要大于屏幕最多可涉及的Tile的区域。例如:屏幕大小是128 X 128,Tile是 8 X 8,缓冲图像至少是 136 X 136 = (128 + 8) X (128 + 8)屏幕大小是120 X 130,Tile是 8 X 8,缓冲图像至少是 128 X 144 = (120 + 8) X ((130+7)/8*8 + 8)屏幕大小是 sc...原创 2010-11-16 20:03:34 · 244 阅读 · 0 评论 -
基于2D多边形的碰撞检测和响应(七)
为了不浪费时间介绍动态刚体,可以直接参参见下面的连接:http://www.d6.com/users/checker/dynamics.htm#articles这里,展示了如何在2D游戏中实施真实的物理。我将介绍一些我所做的扩展,首先,计算给定凸多边形的惯量是有技巧的。需要提醒你的是,惯量适用于角度变化,质量适用于线形变化。较高的惯量对应于较大的质量,在这种情况下物体将很难旋...原创 2010-11-16 20:03:07 · 133 阅读 · 0 评论 -
基于2D多边形的碰撞检测和响应(六)
六、计算触点为了动态的移动刚体,我们需要精确计算两个碰撞多边形之间的触点。对于2D来说这并不复杂,但是在3D场景中会变得非常复杂。在2D情况下,可以考虑两种情况,点和边的相交或者是边和边的相交。这个处理过程几乎不需要教程,但是它非常适合于一个可视化的演示这里,我只考虑交叠的情况,这个原理也适用于碰撞的情况。现在给出一个碰撞的法向,在点边接触的情况下,如何求得触点?对于接触点...原创 2010-11-16 20:02:33 · 135 阅读 · 0 评论 -
基于2D多边形的碰撞检测和响应(五)
五、处理旋转在许多游戏中都可以发现一些旋转的物体。与它们的碰撞会有一点复杂。旋转精灵的标准做法是通过一个简单的角度,通常的区间是[0,2*PI]。可以使用矩阵来存贮三角操作,因此一个角度可以被转化为2*2的矩阵一个简单的处理旋转物体碰撞的方法是保存一个原始多边形的副本,并将其转化到当前位置和角度。这是非常简单的,因此我决定详细描述并给出一个通用的碰撞检测系统,这个系统同样可以用于3D的情况...原创 2010-11-16 20:02:03 · 153 阅读 · 0 评论 -
基于2D多边形的碰撞检测和响应(四)
四、 基本弧碰撞响应下面要作的是用给定的量将两个物体分离,并添加一点摩擦和一些静态摩擦,以便使物体静止在斜面上。该部分使用简单的速度影响算法。同样,为了使碰撞响应更加真实,物体被赋予了质量(更好的是质量的倒数)。质量的倒数是比较常用的,该值为零意味着该物体具有无穷大的质量,并因此不能移动。同时速度响应中使用质量的倒数具有更好的物理精确性。现在我们知道多边形A在位置PA具有速...原创 2010-11-16 20:01:18 · 130 阅读 · 0 评论 -
基于2D多边形的碰撞检测和响应(三)
三、对快速移动的物体做进一步扩展 上述方法处理慢速移动物体时会取得非常好的效果。但是当物体移动的非常快时,碰撞系统将失去准确性,丢失碰撞,或者允许物体之间相互穿越,这可不是我们所期望的。这里我们还是使用分离坐标轴的方法,并进一步扩展,并使用该算法检测未来某时刻的碰撞和交叠。原理还是相同的,可以使用下面的图片解释:现在需要使用投影数学。如果投影间隔没有相交,将速度投影到分离轴上,...原创 2010-11-16 20:00:26 · 124 阅读 · 0 评论 -
基于2D多边形的碰撞检测和响应(二)
二、用于碰撞响应的扩展分离坐标轴方法检测多边形相交是非常有用的方法,但是可以做更多的事情。当多边形相交时,我想将他们移开以避免他们相交。分离轴的方法可以非常好的用于这种情况,但是还需要作一些额外的工作。必须返回相交的深度,和推开多边形将它们分离的方向。相交的深度和方向的组合称为MTD,或者最小pingyi距离。这是用于将物体分离的的最小向量。为了计算MTD,我们可以使用分离坐标轴。...原创 2010-11-16 19:59:50 · 166 阅读 · 0 评论 -
像素级碰撞算法2
(此为国外网站的自动英译中,- -!遗憾的是不能手动调回英文状态... 所以措词看的很不舒服! 但代码和他说的几个碰撞的介绍的地址,还是值得保留和参考的) 你将不得不自己,程序这和小心的像素碰撞可能是 iPhone 来说太贵了。 我的建议是写 (称为在每个其他编程语言中的接口) 的 Collidable 协议,给它一个 collidedWith:(Collidable *) c 函数...原创 2010-11-16 20:15:10 · 164 阅读 · 0 评论