libgdx touchUp 事件

Posted

技术标签:

【中文标题】libgdx touchUp 事件【英文标题】:libgdx touchUp event 【发布时间】:2012-10-23 13:20:48 【问题描述】:

我正在使用带有舞台作为按钮的演员。我可以检测到 touchDown/touchUp 事件何时在演员身上发生得很好,但是当用户点击演员然后继续将他们的手指从演员身上拖出时,touchUp 事件永远不会触发。我尝试改用退出事件,但它永远不会触发。在我的程序中,touchUp/touchDown 事件决定了移动以及按钮颜色,这取决于按钮是否被按下。所以我留下了一个永久“按下”的按钮,直到它再次被向下/向上点击。

我正在使用的代码示例:

stage.addListener(new InputListener() 

    public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) 
        Actor actor = stage.hit(x, y, true);
        if (actor != null)
            System.out.println("touchDown: " + actor.getName().toString()); 
        
        return true;
    

    public void touchUp (InputEvent event, float x, float y, int pointer, int button) 
        Actor actor = stage.hit(x, y, true);
        if (actor != null)
                System.out.println("touchUp: " + actor.getName().toString());           
                
        

    public void exit(InputEvent event, float x, float y, int pointer, Actor toActor)
        System.out.println("exit");
    
);

【问题讨论】:

您使用的是什么版本的 libgdx?最新的好像没有Stage.addListener()。也许这是在比您使用的版本更新的版本中修复的错误。 我正在使用 2012 年 10 月 20 日的夜间版本,libgdx.txt 说它是 0.9.3,然后我会尝试 0.9.6。 啊。好吧,我不太熟悉流血的边缘。如果我不得不猜测,我会说实现 touchDragged() 可能会有所帮助。 我也试过了:),但运气不好,它永远不会触发。 【参考方案1】:

如果你改变了

stage.addListener(new InputListener() );

stage.addListener(new ClickListener() );

它将识别 TouchUp 调用。它仍然能够处理 TouchDown 和 Exit 调用。

【讨论】:

为什么?这是一个错误吗?会修复吗?【参考方案2】:

我遇到了同样的问题。我通过创建 boolean isDown 变量作为我的 GameScreen 类的字段来修复它。每当我的背景图像上发生 touchDown 时,我将 isDown 变量设为 true,而当 touchUp 发生时 - isDown = false。这样touchUp总是会发生。然后仍然在我的 GameScreen 渲染方法中检查 isDown 是否为真,如果是,我检查触摸是否与我的演员相交:

if (isDown) 
   if (pointIntersection(myActor, Gdx.input.getX(), Gdx.input.getY())) 
                // do something
   
 else 
  // reverse the effect of what you did when isDown was true

其中pointIntersection方法是:

public static boolean pointIntersection(Image img, float x, float y) 
    y = Gdx.graphics.getHeight() - y;
    if (img.x <= x && img.y <= y && img.x + img.width >= x && img.y + img.height >= y)
        return true;

    return false;

这是我发现的唯一解决方法。不过,它不是很漂亮,但对我有用。

【讨论】:

以上是关于libgdx touchUp 事件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 ScnViewGestures.Forms 在 Xamarin.Forms 中使用 TouchDown 和 TouchUp 事件创建视图

9.2.2Libgdx的输入处理之事件处理

无法让事件在我的 libgdx Actor 中工作

Libgdx之监听用户输入

Libgdx 输入处理器无法正常工作

Libgdx之监听用户输入