(我将不会百分之百地确定这个标签是否与此相关)球员似乎与空气相撞?
我在这里令人难以置信的困惑。我试图使用这个(简化)模型让我的弓箭手碰撞:
但是,正如你所看到的,我的弓箭手似乎在半空中相撞!我会理解它们是否会通过(例如,我没有在我的碰撞模型中提供足够的“分数”),但实际上似乎与任何东西碰撞都让我感到莫名其妙。
我正在服务器上加载模型,代码与我在客户端显示的代码相同,所以不能成为问题。无论如何,我有pastebinned it here。
然后,我将它添加到三个int[]
阵列,像这样:
coordsx = new int[80 * 10];
coordsy = new int[80 * 10];
coordsz = new int[80 * 10];
for (javax.vecmath.Vector3f vec : m.getVertices()){ //Quick note: M is a model. As you can see, I'm just going through all the vertex positions.
coordsx[DELTA+(int) vec.x] = 1;
coordsy[DELTA+(int) vec.y] = 1;
coordsz[DELTA+(int) vec.z] = 1;
}
快速注:DELTA是((80 * 10)/2)
值或保存数学,400
。此外,我使用了三个int[]
而不是int[][][]
,因为int[][][]
导致了我无法修复的OutOfMemory
。
现在,我已经得到了坐标这些阵列,我使用这个代码来检查它:
for (int x = (int) (location.x + 1); x > location.x - 1; x--){
for (int y = (int) (location.y + 1); y > location.y - 1; y--){
for (int z = (int) (location.z + 1); z > location.z - 1; z--){
distancex = x;
distancez = z;
distancey = y;
try{
int i = 0;
if (owner.type == 0){
if (GameServer.DELTA + distancex > 0 && GameServer.DELTA + distancex < 800 && GameServer.coordsx[(int) (GameServer.DELTA + distancex)] == 1){
if (GameServer.DELTA + distancey > 0 && GameServer.DELTA + distancey < 800 && GameServer.coordsy[(int) (GameServer.DELTA + distancey)] == 1){
if (GameServer.DELTA + distancez > 0 && GameServer.DELTA + distancez < 800 && GameServer.coordsz[(int) (GameServer.DELTA + distancez)] == 1){
i = 1;
}
}
}
}
if (i == 1){
collision = true;
YDown = 0;
}
}catch (ArrayIndexOutOfBoundsException e1){
e1.printStackTrace();
}
}
}
}
if (collision){
System.out.println("Collision!");
}else{
System.out.println("No Collision!");
location.y = location.y-=YDown;
}
location
是弓箭手X,Y和Z的Vector3f
相对于船的位置 - 我已经使用de-bug消息检查过了,位置确实正确地返回。
正如您所看到的,如果在被检查的点的X,Y和Z位置都有一个坐标,则变量i
仅被设置为1。显然,我也遍历所有附近的坐标,因为我的球员不只是一个单一的点。
由于玩家似乎与空气发生碰撞,所以显然有些问题。但我找不到什么。
我在这里的正确轨道上,还是我做的一切都完全错误?如果我在正确的轨道上,那么这里出了什么问题,我该如何解决它?
游戏的难点在于测试和调试是非常地狱。然而,你的碰撞检测代码与OpenGL是完全分离的,所以它可以花费一些努力来设置一个测试理由,你可以在控制台中运行,并对代码进行基本的单元测试,看看在哪些情况下代码不会做你期望的事情。这是无聊的工作,但比在运行游戏中进行调试要容易得多 - 尤其是因为运行的游戏将会传播无数的调试数字。 – Gimby 2015-02-10 12:56:19