我正在尝试映射键盘的键以触摸舞台上的某个点。 这是我当前的代码,但它不会崩溃或做任何事情。
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上放了一个按钮来捕获事件,但上面的代码没有这样做。
答案 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);