Skip to content

Touchable JGameObject

Radomiej edited this page Apr 4, 2017 · 6 revisions

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 bounds

You 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.

Clone this wiki locally