-
Notifications
You must be signed in to change notification settings - Fork 0
Touchable JGameObject
Javity provide easy system for fast touch input proccess, like:
- click
- mouse-over
- dragged
- pressed
- relased
It default enabled for physic object, if you want add touch for non-physic object, example only for SpriteRenderer or TextRenderer you must remember add TouchableObject component to this:
JGameObject touchableLogoObject = scene.instantiateGameObject(new Vector2(250, 250));
touchableLogoObject.addComponent(new SpriteRenderer("images/logo.png"))
touchableLogoObject.addComponent(new TouchableObject())if you need manually set input collision bounds, you can set it in constructor:
JGameObject touchableLogoObject = scene.instantiateGameObject(new Vector2(250, 250));
touchableLogoObject.addComponent(new SpriteRenderer("images/logo.png"))
touchableLogoObject.addComponent(new TouchableObject(2048, 2048)) //Set manually input boundsYou must remember that in default physic based system, you can detect collision only on object with RigidbodyComponent and XXXCollider components, because box2d system is usage for collision detect.
public class MyComponent extends DefaultComponent {
@Override
public void start() {
}
@Override
public void update() {
}
@Override
public void onMouseClicked() {
System.out.println("onMouseClicked");
}
@Override
public void onMouseDragged(Vector2 draggedDelta) {
System.out.println("onMouseDragged");
}
@Override
public void onMousePressed() {
System.out.println("onMousePressed");
}
@Override
public void onMouseRelased() {
System.out.println("onMouseRelased");
}
@Override
public void onMouseOver() {
System.out.println("onMouseOver");
}
}You can use MyComponent to input handled and move map if is dragging:
@Override
public void onMouseDragged(Vector2 draggedDelta) {
System.out.println("dragged");
Vector2 position = getTransform().getPosition();
position.add(draggedDelta.x, -draggedDelta.y);
getTransform().setPosition(position);
}If you need prevent input executed if some of the GUI element was touch, Javity provide easy method for that:
@Override
public void onMouseDragged(Vector2 draggedDelta) {
if (JGUI.INSTANCE.isStageHandleInput()) {//GUI elements consumed Input Event
return;
}
Vector2 position = JCamera.getMain().getPosition();
position.add(-draggedDelta.x * draggedSpeed, draggedDelta.y * draggedSpeed);
JCamera.getMain().setPosition(position);
}GUI elements have higher priority handle input events, it means if input collision occurs with GUI element like button, you can check it via JGUI.INSTANCE.isStageHandleInput() method and cancel process input.