【发布时间】:2014-05-01 00:22:27
【问题描述】:
我正在制作一款 roguelike 游戏,并尝试在我的游戏中实施“快速而肮脏”的 FOV 技术,但我遇到了一些问题。我几乎可以肯定它是在我的函数中完成线计算的,其中我有一个 x 和 y 变量沿着 2 个点(我正在检查的图块和玩家)之间的角度移动。
如果你不知道什么是“又快又脏”的 FOV,这里是链接http://www.roguebasin.com/index.php?title=Quick_and_dirty_FOV/LOS
代码
public static boolean lineOfSight( int xx, int yy, int xx2, int yy2) {
float deltaX = xx - xx2;
float deltaY = yy - yy2;
float angle = (float) Math.atan2(deltaY,deltaX);
int distance = distanceCheck(player.x,player.y,xx2,yy2);
int counter = 0;
while(counter < distance) {
counter ++;
xx += (int) (Math.sin(angle));
yy += (int) (Math.cos(angle));
if(map[xx][yy] == 1) {
return false;
}
}
return true;
}
【问题讨论】:
-
您的预期产出与实际产出是什么?
-
你到底是什么意思?
-
当您测试您的方法时,您必须向它传递一些值并期待一些输出。你正在运行什么测试,你得到了什么不正确的输出。
-
我给它我的玩家 x 和 y 点以及瓷砖 x 和 y 点,并且该区域中的所有内容都可见,或者缺少四分之一的圆圈我最好的选择是我计算我的角度错误。 .im 只是不确定我做错了什么