我有一个角色,比如20 x 10像素大,我有一个基于像素的碰撞图(想想蠕虫).
给定速度大于每帧1个像素的角色追踪碰撞的最佳方法是什么.有没有比沿速度矢量迭代每个像素更好的解决方案?
我在Lua(Love 2D)中这样做,但通用解决方案将是理想的.
解决方法
我会结合边界框碰撞和像素完美碰撞.
因此,游戏中的所有实体都会有边界框,只有框架等于精灵的宽度和高度.将此作为您的第一级碰撞测试.完成此操作后,如果发生碰撞,则使用碰撞贴图获得更精细的细节.
这种优化将有助于提高速度,并为引擎增加灵活性,并非所有碰撞都必须是像素完美的.
至于实际的像素完美碰撞算法,你所描述的将起作用.但是,如果你想要速度,你可能想尝试这个:
为每个精灵提供一个位掩码(如像素图,但每个像素只有一位)
例如:
00000000 00100000 01100000 01110000
当一个精灵与另一个精灵碰撞时,从较大的一个比较大的相同大小的位掩码中创建一个新的位掩码,并通过精灵之间的位置差异来“偏移”它.
完成此操作后,逐位’和’这两个掩码中的所有字节.如果任何字节结果> 0,你有碰撞.