我正在与LibGDX合作开发游戏,我正试图弄清楚如何限制TouchEvent跳跃。
MY ATTEMPT:
if(player.b2body.getLinearVelocity().y > 3.5f){
float currentVelocityY = player.b2body.getLinearVelocity().y;
player.b2body.applyLinearImpulse(new Vector2(0, (- currentVelocityY)), player.b2body.getWorldCenter(), true);
}
如果超过某个值,我正考虑降低Y轴上的速度。但这不起作用,好像我一直触摸屏幕,角色会飞得更高。
我想限制touchEvent在短时间内跳转两次。
你的任何想法?
感谢。
答案 0 :(得分:5)
解决方案1(限制每秒的跳跃次数):
所以,你的角色会跳上touchDown事件。您可以定义一个变量来存储最后一次点击,以毫秒为单位:
long lastTap = System.currentTimeMillis();
点击活动:
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
if(System.currentTimeMillis() - lastTap < 1000)
return true;
// your character jump code
lastTap = System.currentTimeMillis();
return true;
这应该每秒只调用一次你的跳转代码(因为if中的1000ms),无论你多快点击。只需测试数字(500我们每秒2次点击,250 - 4等)。
解决方案2(限制跳数):
您可以定义一个变量来存储执行跳转的次数和最大跳跃次数:
int jumps = 0;
int maxJumps = 3;
点击活动:
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
// the limit is reached
if(jumps == maxJumps)
return true;
// your character jump code
jumps++;
return true;
当你的身体掉落时,重置你的render()方法或你角色的box2d交互监听器中的jumps var:
if(player.b2body.getLinearVelocity().y == 0)
jumps = 0;
现在用户将能够进行3次快速跳跃,然后他将不得不等待角落掉在地上再次跳跃。
解决方案3(检查点击力)
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
if(player.b2body.getLinearVelocity().y > 3.5f)
return true;
// your character jump code
return true;
}
现在,只要y速度低于3.5f,用户就能跳转。