Hi im making a split screen game and i cannot figure out how to get the controls down. Right now they work fine if only one person is touching the screen but once multiple do the first person to touch is the only one who can control. So i need to implement multitouch. I cant figure out how to do it so once one finger is down controlling the object on the top half of the screen another finger can be put down controlling the bottom half of the screen. How should i do this?
EDIT:
I changed it, it still doesnt work though could somebody tell me why
My attempt that doesnt work:
public boolean onTouch(View v, MotionEvent event){
//needs multitouch
if(checkInGame()){
if(event.getY() < this.getMeasuredHeight() / 2){
pointerId1 = event.getPointerId(event.getActionIndex());
}else{
pointerId2 = event.getPointerId(event.getActionIndex());
}
switch(event.getAction() & MotionEvent.ACTION_MASK){
case MotionEvent.ACTION_MOVE:{
if(event.getPointerId(event.getActionIndex()) == pointerId1){
Log.d("Touch","Move1");
int pointerIndex = event.getActionIndex();
int moveX = 0;
int moveY = 0;
moveX = (int) event.getX(pointerIndex) - sX;
moveY = (int) event.getY(pointerIndex) - sY;
ship1.setLoc(moveX, moveY);
sX = sX + moveX;
sY = sY + moveY;
}else if(event.getPointerId(event.getActionIndex()) == pointerId2){
int pointerIndex = event.getActionIndex();
Log.d("Touch","Move2");
int moveX = 0;
int moveY = 0;
moveX = (int) event.getX(pointerIndex) - sX2;
moveY = (int) event.getY(pointerIndex) - sY2;
ship2.setLoc(moveX, moveY);
sX2 = sX2 + moveX;
sY2 = sY2 + moveY;
}
return true;
}
case MotionEvent.ACTION_DOWN: {
if(event.getPointerId(event.getActionIndex()) == pointerId1){
Log.d("Touch","Top1");
int pointerIndex = event.getActionIndex();
sX = (int) event.getX(pointerIndex);
sY = (int) event.getY(pointerIndex);
}else if(event.getPointerId(event.getActionIndex()) == pointerId2){
int pointerIndex = event.getActionIndex();
Log.d("Touch","Bottom1");
sX2 = (int) event.getX(pointerIndex);
sY2 = (int) event.getY(pointerIndex);
}
return true;
}
case MotionEvent.ACTION_POINTER_DOWN:{
if(event.getPointerId(event.getActionIndex()) == pointerId1){
Log.d("Touch","Top2");
int pointerIndex = event.getActionIndex();
sX = (int) event.getX(pointerIndex);
sY = (int) event.getY(pointerIndex);
}else if(event.getPointerId(event.getActionIndex()) == pointerId2){
int pointerIndex = event.getActionIndex();
Log.d("Touch","Bottom2");
sX2 = (int) event.getX(pointerIndex);
sY2 = (int) event.getY(pointerIndex);
}
return true;
}
}
You probably want to track each pointer by its ID. On pointer down, check the ID so you know that pointer with ID 1 is controlling object 1. Give this Android blog post a read, it may help: http://android-developers.blogspot.co.uk/2010/06/making-sense-of-multitouch.html