Libgdx InputListener touchUp

时间:2016-02-20 21:09:23

标签: input libgdx

我已将touchUp添加到 actor ,现在我想检查{em> actor 中是否有touchUp事件。

简单的例子:我开始在我的 actor 中放置鼠标,而我正在 actor 之外完成。

我虽然只有当鼠标在我的 actor 中时才会启动touchDown事件,但它也会在我的 actor 之外启动(当touchUp事件时从我的演员开始。

如何检查import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static String replaceWith(String parentString, String occurrence, String replaceWith){ String newString = ""; for(int i = 0; i <= parentString.length()-occurrence.length(); ++i) { boolean add = false; for(int j = 0; j < occurrence.length(); ++j) { if(parentString.charAt(i+j) != occurrence.charAt(j)) add = true; } if(add) { newString += parentString.charAt(i); } else { i += occurrence.length()-1; newString += replaceWith; } } return newString; } public static void main (String[] args) throws java.lang.Exception { System.out.println(replaceWith("I replace banana, banana and some more banana", "banana", "apple")); } } 事件是否仅在我的演员中?

2 个答案:

答案 0 :(得分:1)

我在这里看到两个解决方案:

  1. 使用一些标志来检查指针是否在actor中,并使用退出方法处理它:

    image.addListener(new InputListener(){
        boolean touched = false;
        @Override
        public boolean touchDown(InputEvent event, float x, float y, int pointer, int button)
        {
            touched = true;
    
            System.out.println("TOUCH DOWN");
            return true;
        }
    
        @Override
        public void touchUp(InputEvent event, float x, float y, int pointer, int button)
        {
            if(touched) 
            {
                touched = false;
                System.out.println("TOUCH UP");
            }
        }
    
        @Override
        public void exit(InputEvent event, float x, float y, int pointer, Actor toActor)
        {
            touched = false;
        }
    
    });
    
  2. 检查指针是否在演员内置touchUp

    @Override
        public void touchUp(InputEvent event, float x, float y, int pointer, int button)
        {
            Stage stage = event.getTarget().getStage();
            Vector2 mouse = stage.screenToStageCoordinates( new Vector2(Gdx.input.getX(), Gdx.input.getY()) );
    
            if(stage.hit(mouse.x, mouse.y, true) == event.getTarget()) 
            {
                System.out.println("TOUCH UP");
            }
        }
    
  3. 两种解决方案都需要一些额外的代码,但两者都应该正常工作。

答案 1 :(得分:0)

很抱歉,在您更改时,请注意您的问题。

仍然,我会添加一个监听器,只需检查演员的坐标。使用clicklistener给出的x和y只返回actor的局部坐标,因此对宽度和高度的简单检查就足够了。

    ClickListener cl = new ClickListener()
    {
        @Override
        public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
            super.touchUp(event, x, y, pointer, button);
            if (x > 0 && y > 0 && x < getWidth() && y < getHeight())
            {
                System.out.println("Released within actor");
            }
        }
    };

actor.addListener(cl);