libgdx: user input

18
libGDX: User Input Jussi Pohjolainen Tampere University of Applied Sciences

Upload: jussi-pohjolainen

Post on 22-Apr-2015

245 views

Category:

Technology


2 download

DESCRIPTION

libGDX: User Input

TRANSCRIPT

Page 1: libGDX: User Input

libGDX:  User  Input  

Jussi  Pohjolainen  Tampere  University  of  Applied  Sciences  

Page 2: libGDX: User Input

TOUCH  +  KEYBOARD  

Page 3: libGDX: User Input

Event  vs  Polling  •  Polling  – Do  something  on  each  frame,  really  fast  – Was  mouse  clicked?  Was  mouse  clicked?  Was  mouse  clicked?  

– Good  for  arcade  games  •  Event  – Do  something  when  event  handles  – NoIfy  when  mouse  was  clicked  – UI  elements  such  as  buJons  

•  Mouse  /  touch  /  keyboard  can  be  received  either  polling  or  event  handling  

Page 4: libGDX: User Input

public class MyInputProcessor implements InputProcessor { @Override public boolean keyDown (int keycode) { return false; } @Override public boolean keyUp (int keycode) { return false; } @Override public boolean keyTyped (char character) { return false; } @Override public boolean touchDown (int x, int y, int pointer, int button) { return false; } @Override public boolean touchUp (int x, int y, int pointer, int button) { return false; } @Override public boolean touchDragged (int x, int y, int pointer) { return false; } @Override public boolean mouseMoved (int x, int y) { return false; } @Override public boolean scrolled (int amount) { return false; } }

MyInputProcessor inputProcessor = new MyInputProcessor(); Gdx.input.setInputProcessor(inputProcessor);

Page 5: libGDX: User Input

Polling  Touch  /  Keyboard  

•  For  most  arcade  games,  polling  is  good  •  MulItouch  is  supported!  

–  boolean firstFingerTouching = Gdx.input.isTouched(0); –  boolean secondFingerTouching = Gdx.input.isTouched(1); –  int firstX = Gdx.input.getX(); –  int firstY = Gdx.input.getY(); –  int secondX = Gdx.input.getX(1); –  int secondY = Gdx.input.getY(1);

•  Keyboard  –  boolean isAPressed = Gdx.input.isKeyPressed(Keys.A);

Page 6: libGDX: User Input

ACCELEROMETER  

Page 7: libGDX: User Input

Accelerometer  •  An  accelerometer  

measures  the  acceleraIon  of  a  device  on  three  axes  

•  From  this  acceleraIon  one  can  derive  the  Ilt  or  orientaIon  of  the  device.  –  Phones:  portrait  default  –  Tablet:  landscape  default  

•  LibGDX  shows  accelerometer  readings  always  as  in  the  image  

Page 8: libGDX: User Input

(0,0)  

Accelerometer  x  

Accelerometer  y  

y  increments  

x  increments  

Page 9: libGDX: User Input

Accelerometer  Readings  

•  Accelerometer  readings  can  be  accessed    –  float accelX = Gdx.input.getAccelerometerX(); –  float accelY = Gdx.input.getAccelerometerY(); –  float accelZ = Gdx.input.getAccelerometerZ();

•  When  moving  and  if  in  landscape  mode  in  android,  noIce  X  vs  Y!  –  speedX += Gdx.input.getAccelerometerY();

Page 10: libGDX: User Input

GESTURES  

Page 11: libGDX: User Input

GestureDetector  •  TouchDown  •  LongPress  •  Tap  •  Pan  

–  Useful  for  camera  panning  in  2D  •  PanStop  •  Fling  •  Zoom  

–  Camera  zooming  •  Pinch  

–  Camera  zooming  +  rotaIon  

Page 12: libGDX: User Input

StarIng  to  Listen  to  Gestures  

•  Really  easy  –  Gdx.input.setInputProcessor(new GestureDetector(new MyGestureListener()));

•  MyGestureListener  is  some  class  that  implements  GestureListener  

Page 13: libGDX: User Input

public class MyGestureListener implements GestureListener { @Override public boolean touchDown(float x, float y, int pointer, int button) {} @Override public boolean tap(float x, float y, int count, int button) {} @Override public boolean longPress(float x, float y) {} @Override public boolean fling(float velocityX, float velocityY, int button) {} @Override public boolean pan(float x, float y, float deltaX, float deltaY) {} @Override public boolean panStop(float x, float y, int pointer, int button) {} @Override public boolean zoom (float originalDistance, float currentDistance){} @Override public boolean pinch (Vector2 initialFirstPointer, Vector2 initialSecondPointer, Vector2 firstPointer, Vector2 secondPointer){} }

Page 14: libGDX: User Input

SIMPLE  TEXT  INPUT  

Page 15: libGDX: User Input

User  input  

•  Desktop  – Swing  dialog  

•  Android  – Android  dialog  

•  Use  TextInputListener  –  MyTextInputListener listener = new MyTextInputListener(); –  Gdx.input.getTextInput(listener, "Dialog Title", "Initial

Textfield Value")

Page 16: libGDX: User Input

public class MyTextInputListener implements TextInputListener {

@Override

public void input (String text) {

}

@Override

public void canceled () {

}

}

Page 17: libGDX: User Input

MISC  

Page 18: libGDX: User Input

•  Vibra  – Gdx.input.vibrate(2000); – Remember  to  add  permissions  

•  Compass  – float azimuth = Gdx.input.getAzimuth(); – float pitch = Gdx.input.getPitch(); – float roll = Gdx.input.getRoll();