2016-03-08 79 views
1

我正在与LibGDX一起玩游戏,我正试图弄清楚如何限制TouchEvent跳跃。LibGDX - 如何控制多次跳跃的触摸事件

我尝试:

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限制为只跳两次。

您的任何想法?

谢谢。

回答

5

解决方案1(限制每秒跳跃):

所以,你的角色跳跃上的触下事件。你定义一个变量来存储以毫秒为单位的最后两次:

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; 

这应该打电话给你跳跃的代码只有每秒一次(因为如果在1000毫秒)不管你点击多快。只需测试一下数字(我们每秒钟抽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交互侦听器中的跳转var时E身体落在:

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跳。

+0

你好雅森,谢谢你的回答。只是回复我注意到它,并会在今天晚些时候对它进行测试 - 目前我在办公室。一旦测试就会接受你的答案! –

+0

我使用了maxJumps选项,它适用于我。我将它设置为2,这是我想达到的。回答已接受并已提交。谢谢@Yasen! –