Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java LWJGL-使3D FPS相机跳跃_Java_Opengl_3d_Game Physics - Fatal编程技术网

Java LWJGL-使3D FPS相机跳跃

Java LWJGL-使3D FPS相机跳跃,java,opengl,3d,game-physics,Java,Opengl,3d,Game Physics,所以我正在做我的第一个3D项目,一切都很顺利,直到我决定让FPS角色相机跳跃。我尝试了一些方法,但直到我成功地做了一些大部分时间都有效的事情,所有这些方法看起来都不太好。现在的问题是大部分时间——应该是所有时间 问题是,当我连续单击跳转按钮时,它开始发狂。当我超过它时,我试图将位置设置回零,但有时它仍然会异常,尽管不太经常。为了让它一直工作,有什么建议吗?我在没有引擎的情况下使用OpenGL和java 跳转部件代码: if (Keyboard.isKeyDown(Keyboard.KEY_SPA

所以我正在做我的第一个3D项目,一切都很顺利,直到我决定让FPS角色相机跳跃。我尝试了一些方法,但直到我成功地做了一些大部分时间都有效的事情,所有这些方法看起来都不太好。现在的问题是大部分时间——应该是所有时间

问题是,当我连续单击跳转按钮时,它开始发狂。当我超过它时,我试图将位置设置回零,但有时它仍然会异常,尽管不太经常。为了让它一直工作,有什么建议吗?我在没有引擎的情况下使用OpenGL和java

跳转部件代码:

if (Keyboard.isKeyDown(Keyboard.KEY_SPACE) && !jumping
    && position.y >= temp) { //temp - floor height 
jumping = true;
}
gravity = (float) ((walkingSpeed * 0.00003) * delta);//delta - time
//System.out.println(delta);
if (position.y < temp) { //In the air
    speed = speed + gravity;
    position.y = position.y + speed;
}
if (jumping) {
    speed = speed - (float) ((walkingSpeed * 0.0006) * delta);
    position.y = position.y + speed;
    jumping = false;
}
if (position.y > temp) //**Supposed** to solve the problem
    position.y = temp;
代码中有许多问题与您描述的内容不同步: 你几乎所有的东西都有相反的标志 您正在测试一个总是计算为true的条件!跳跃的
你的问题到底是什么还不清楚。问题是你能在半空中跳跃吗?你可能应该保持跳跃状态为真,直到你撞到地面,而不是在瞬间改变速度后立即重置它。正确地这样做当然需要某种类型的碰撞检测,但你可以天真地假设地面是一个水平面,并根据初始高度进行测试,我认为你现在正在这样做。顺便说一下,一些FPS游戏允许你进行双跳,因此,不要跳一个布尔值,你可以考虑使用整数反击。我的问题是当我不断点击空格键时。起初,它有规律地跳跃,但过了一段时间,它突然开始从我写的东西或相反的地方跳跃X10。我不知道为什么会发生这种情况,我需要一个建议如何做得更好\修复它。关于双人跳远,不是现在。我首先需要基础知识。我正在一个普通的房间里做简单的散步,稍后我会扩展它。嗯,是的。这里的问题是,如果你持续按住空格键,它不会阻止你跳无限次。只有在你落地后,才应该将跳跃设置为false。否则,当空格键关闭时发生的每一帧都会导致你跳。@AndonM.Coleman-不,这不是让我再次跳的问题。我跳了又跌,只有当我碰到地板时,我才能再次跳。请看代码中的第一条if语句。我会尽量解释得更好。例如,我应该从y=0跳到y=3,这是可行的。但有时,当我单击空格键一次时,它会突然跳到y=17。这发生在我连续单击空格键之后,有时它也会跳到y=0.5,例如。那里发生了一些事情,即使是在常规跳跃中也会让它发狂,我必须重新打开游戏,它才能再次工作。他可能有屏幕坐标,屏幕顶部有0,因此-y向上。这并不是什么问题,只是违反直觉。@schmop:事实上,这都是对一些冗长评论的回应,他指的是从Y=0跳到Y=3。这意味着他头脑中/讨论中的方向与代码中的方向不同。@AndonM.Coleman-只是看到了并尝试了。。。。我错了,真的是-y。。。。不管怎样,我尝试了那个代码,同样的问题也发生了。我想问题出在别的地方了吧?我应该提供更多的代码吗?我在这里真的迷路了。
// Only start a jump while on the ground (position.y <= temp)
if (Keyboard.isKeyDown(Keyboard.KEY_SPACE) && position.y <= temp) {
  speed = speed + (float) ((walkingSpeed * 0.0006));
  // Don't care about the delta time when you jump, just add a fixed amount of
  // positive vertical velocity (which gravity will work out over time).
}

// You had gravity going the wrong direction initially
gravity = (float) -((walkingSpeed * 0.00003) * delta);

//System.out.println(delta);
speed      = speed + gravity;
position.y = position.y + speed;

if (position.y < temp) { // Don't sink into the ground
  position.y = temp;
  speed      = 0.0; // Scrub off acceleration due to gravity
}