LibGDX + Box2D:justTouched 使我的力量倍增
LibGDX + Box2D: justTouched multiplies my forces
现在我的代码如下:
if(Gdx.input.justTouched()) {
if(cl.isPlayerOnGround()) {
playerBody.applyForceToCenter(0, B2DVars.jumpForce, true);
}
}
它在大多数情况下都有效,但是如果您在桌面上同时单击两个鼠标按钮,或在 android 上进行多点触控,则 jumpForce 会成倍增加。我需要忽略所有 clicks/taps,但第一个直到玩家再次接触地面。
(cl 是联系人侦听器。)
有多种方法可以解决此问题,但在我看来,解决此问题的最佳方法是限制应用 jumpForce 的频率。这可能会防止以后出现其他问题。
//class var
float lastJumpForceTime = 0.5f; // start at 0.5f to enable jumping from the start
float jumpForceDelay = 0.5f; // delay between jumps, 0.5f = half second
//method that calls your code
//delta time is the time since last update LibGDX provides this but you will need to pass it
public void yourMethod(float deltaTime, ...){
lastJumpForceTime += deltaTime; // update last jump time
// check if player is on ground and if time since last jump is > delay
if(cl.isPlayerOnGround() && lastJumpForceTime >= jumpForceDelay){
lastJumpForceTime = 0.0f;
playerBody.applyForceToCenter(0, B2DVars.jumpForce, true);
}
}
现在我的代码如下:
if(Gdx.input.justTouched()) {
if(cl.isPlayerOnGround()) {
playerBody.applyForceToCenter(0, B2DVars.jumpForce, true);
}
}
它在大多数情况下都有效,但是如果您在桌面上同时单击两个鼠标按钮,或在 android 上进行多点触控,则 jumpForce 会成倍增加。我需要忽略所有 clicks/taps,但第一个直到玩家再次接触地面。
(cl 是联系人侦听器。)
有多种方法可以解决此问题,但在我看来,解决此问题的最佳方法是限制应用 jumpForce 的频率。这可能会防止以后出现其他问题。
//class var
float lastJumpForceTime = 0.5f; // start at 0.5f to enable jumping from the start
float jumpForceDelay = 0.5f; // delay between jumps, 0.5f = half second
//method that calls your code
//delta time is the time since last update LibGDX provides this but you will need to pass it
public void yourMethod(float deltaTime, ...){
lastJumpForceTime += deltaTime; // update last jump time
// check if player is on ground and if time since last jump is > delay
if(cl.isPlayerOnGround() && lastJumpForceTime >= jumpForceDelay){
lastJumpForceTime = 0.0f;
playerBody.applyForceToCenter(0, B2DVars.jumpForce, true);
}
}