像素碰撞追踪

我有一个大小为20 x 10像素的角色和一个基于像素的碰撞地图(类似于贪吃蛇)。

如果角色的速度大于每帧1像素,有什么最佳的方法来追踪碰撞。是否有比沿着速度向量迭代每个像素更好的解决方案?

我在Lua(Love 2D)中进行此操作,但通用解决方案最理想。

原文链接 https://stackoverflow.com/questions/7336820

点赞
stackoverflow用户312586
stackoverflow用户312586

你的解决方案最简单-迭代每个像素。

只需确保在每次迭代中仅检查“新”像素。

假设字符同时向右下移动:

*****   .....       .....        * =“现在”
*****   .*****      .****#       . =“旧且现在为空”
*****   .***** = >   .****#       # =“新的”;在第2次迭代中检查这些内容
*****   .*****      .****#
         *****       #####

It. 1   It. 2      “新的”像素

沿着移动的每次迭代中要检查的像素几乎没有什么区别; 仅需要检查标记为“新”的像素以进行影响检查。在这些像素上进行检查,如果没有碰撞,则继续移动。您可以使用此来优化大量计算。

2012-01-18 18:41:36
stackoverflow用户141727
stackoverflow用户141727

我会结合包围盒碰撞和像素完美碰撞。

因此,您的游戏中的所有实体都将具有包围盒,即与您的精灵宽度和高度相同的框架。将其用作您的第一级碰撞测试。完成此操作后,如果有撞击,则使用碰撞映射获取更细节的级别。

这种优化将有助于提高速度,并为引擎增加了灵活性,因为并不是所有碰撞都必须是像素完美的。

至于实际的像素完美碰撞算法,您所描述的方法是可行的。但是,如果您想提高速度,可以尝试以下方法:

为每个精灵提供一个位掩码(如像素映射,但每个像素仅有一个位) 例如:

00000000
00100000
01100000
01110000

当一个精灵与另一个精灵发生碰撞时,从较小的位掩码创建一个与较大的位掩码相同大小的新位掩码,并通过精灵之间位置差异进行“偏移”。

完成此操作后,请按位“与”这两个掩码中的所有字节。如果任何字节的结果> 0,则存在碰撞。

2012-01-20 00:18:52