inputprocessor touch down给出了迟到的响应?

时间:2015-08-19 15:59:10

标签: java android libgdx

所以我现在忙于为Android设计一种pong游戏。我现在所有的只是球拍和球。播放器(球拍)的控件如下:

  • 如果玩家触摸屏幕左侧,则划桨左侧
  • 如果玩家触摸屏幕右侧,则右侧划桨

实际上上面的2点工作正常,但令我困扰的是,当我用我的右手指握住它,然后释放它并且用左手指快速握住左边时,桨只执行一次“走离开“,然后停下来,而我仍然向左走。 (反之亦然)

我发现如果我用两根手指就会发生这种情况。如果我用我的手指向右按住,并试图快速按下另一侧,它就不会停止并且实际上继续向左移动。

但是使用两根手指很重要,因为这就是玩游戏的方式。

这一切都可能解释不清楚,因此您可以在评论中提出更具体的问题。

Player.java:http://pastebin.com/pdFZJTRB

MyInputProcessor.java:http://pastebin.com/XPzi8JPB

1 个答案:

答案 0 :(得分:0)

我认为您的问题在于您在左侧和右侧之间共享touchDown布尔值。如果您足够快地按左侧,则在将右手指的touchDown设置为false之前,左手指的touchDown将设置为true,从而使它们全部为假。尝试这样的事情:

package com.nahrot.teleportball;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.InputProcessor;
import com.badlogic.gdx.math.Vector2;

public class MyInputProcessor implements InputProcessor
{
    public Vector2 leftTouchPos = new Vector2();
    public Vector2 rightTouchPos = new Vector2();
    public boolean touchLeft = false;
    public boolean touchRight = false;

    @Override
    public boolean keyDown(int keycode)
    {
        return false;
    }

    @Override
    public boolean keyUp(int keycode)
    {
        return false;
    }

    @Override
    public boolean keyTyped(char character)
    {
        return false;
    }

    @Override
    public boolean touchDown(int screenX, int screenY, int pointer, int button)
    {
        if(sideTouched(screenX, true))
    { 
            touchLeft = true;
            leftTouchPos.set(screenX, screenY);
    }
    if(sideTouched(screenX, false))
    {
        touchRight = true;
        rightTouchPos.set(screenX, screenY);
    }
        return false;
    }

    @Override
    public boolean touchUp(int screenX, int screenY, int pointer, int button)
    {
        if(sideTouched(screenX, true))
        { 
            touchLeft = false;
    }
    if(sideTouched(screenX, false))
    {
        touchRight = false;
    }
        return false;
    }

    @Override
    public boolean touchDragged(int screenX, int screenY, int pointer)
    {
        return false;
    }

    @Override
    public boolean mouseMoved(int screenX, int screenY)
    {
        return false;
    }

    @Override
    public boolean scrolled(int amount)
    {
        return false;
    }

    private boolean sideTouched(int x, boolean checkLeft)
    {
    if(checkLeft)
    {
        if(x <= Gdx.graphics.getWidth() / 2)
            return true;
    }
    else
    {
        if(x > Gdx.graphics.getWidth() /2)
            return true;
    }
    return false;
    }
}

在这里,我将布尔和向量分为左侧和右侧,并提供了一个便利功能,用于检查touchDown或touchUp是否位于屏幕的右侧或左侧,并相应地调整相应的布尔值和向量。我认为无论如何都需要向量来检查哪一侧被按下,所以我怀疑你可以使用它,这样你所需要的就是两个被触摸的布线。顺便说一句,这段代码是未经测试的,但是如果它不起作用你应该知道。