如何向Libgdx中的阶段发送触摸输入?

时间:2018-03-18 04:53:37

标签: java libgdx

我正在尝试映射键盘的键以触摸舞台上的某个点。 这是我当前的代码,但它不会崩溃或做任何事情。

InputEvent touch = new InputEvent();
touch.setType(InputEvent.Type.touchUp);
touch.setStageX(400);
touch.setStageY(200);
currentStage.getRoot().fire(touch); //this doesn't do anything

创建currentStage实例并将其设置为InputProcessor。我在400,200上放了一个按钮来捕获事件,但上面的代码没有这样做。

2 个答案:

答案 0 :(得分:1)

看起来你期望InputEvent将heirarchy中的每个actor与坐标进行比较以确定它是否响应。这不是Stage处理输入事件的方式。

当发生实际的屏幕触摸时,Stage会确定触摸了哪个actor并直接在该actor上触发InputEvent。如果在根上触发手动创建的InputEvent,则只有root有机会响应它。

如果你想手动创建一个输入事件并让舞台找出要给它的actor,你可以调用stage.hit(),如果它返回一个Actor,那就是触摸点下的可触摸Actor ,你可以在那个演员身上开火。

答案 1 :(得分:0)

您可以使用Stage的下一个方法来模拟用户参与度:

/** 
 * Applies a touch down event to the stage and returns true if an actor 
 * in the scene {@link Event#handle() handled} the event. 
 */
public boolean touchDown(int screenX, int screenY, int pointer, int button)

/** 
 * Applies a touch moved event to the stage and returns true if an actor
 * in the scene {@link Event#handle() handled} the
 * event. Only {@link InputListener listeners} that returned true for 
 * touchDown will receive this event. 
 */
public boolean touchDragged (int screenX, int screenY, int pointer) 

/** 
 * Applies a touch up event to the stage and returns true if an actor 
 * in the scene {@link Event#handle() handled} the event.
 * Only {@link InputListener listeners} that returned true for 
 * touchDown will receive this event. 
 */
public boolean touchUp (int screenX, int screenY, int pointer, int button)

在你的情况下:

 Vector2 point = new Vector2(400, 300);
 currentStage.stageToScreenCoordinates(point);
 // this method works with screen coordinates
 currentStage.touchDown((int)point.x, (int)point.y, 0, 0);