目前,我正在自己开发一款基于图块的游戏(想想Terraria,但不要太幻想了(我认为这是一个词?如果不是,抱歉)。
无论如何,我目前有碰撞检测功能(甚至适用于极端情况!),这对我来说是一大进步。看到一个精灵没有穿过一个块,这让我非常高兴。但是后来我有了基准测试的想法。馊主意。
1000平方,没问题。10,000平方,对于3个字符来说有点滞后。100,000平方(真是巨大的地图),无法显示3个字符。
我遇到的问题是,我什至不想考虑与玩家,角色,物品等距离太远的块,但我不想不断地将这些块装入内存。
到目前为止,这是我的算法,请随时批评。
foreach (Block in level)
{
if (distance from block to player > a specified amount)
ignore this block;
else
{
get the intersection depth between the two bounding boxes
if (depth of intersection != Zero-vector)
{
check y size vs x size
resolve on smallest axis
}
}
}
您将注意到,当级别大小变大时,该算法的阶数将增加N个块。我什至不考虑玩家附近的障碍物。
我在想也许使用(0,0)到(mapWidth,mapHeight)块的双数组而不是列表,根据人的位置计算危险区域,例如,如果玩家的位置在(10,20)它将从(0,10)到(20,30),依此类推。
任何想法和考虑都很棒,谢谢。