Game Development Reference
In-Depth Information
boolean [] isTouched= new boolean [ MAX_TOUCHPOINTS ];
int [] touchX= new int [ MAX_TOUCHPOINTS ];
int [] touchY= new int [ MAX_TOUCHPOINTS ];
int [] id= new int [ MAX_TOUCHPOINTS ];
Pool<TouchEvent>touchEventPool;
List<TouchEvent>touchEvents= new ArrayList<TouchEvent>();
List<TouchEvent>touchEventsBuffer= new ArrayList<TouchEvent>();
float scaleX;
float scaleY;
public MultiTouchHandler(View view, float scaleX, float scaleY) {
PoolObjectFactory<TouchEvent>factory= new PoolObjectFactory<TouchEvent>() {
public TouchEvent createObject() {
return new TouchEvent();
}
};
touchEventPool= new Pool<TouchEvent>(factory, 100);
view.setOnTouchListener( this );
this .scaleX=scaleX;
this .scaleY=scaleY;
}
public boolean onTouch(View v, MotionEvent event) {
synchronized ( this ) {
int action=event.getAction() & MotionEvent. ACTION_MASK ;
int pointerIndex=(event.getAction() & MotionEvent. ACTION_POINTER_ID_MASK )
>>MotionEvent. ACTION_POINTER_ID_SHIFT ;
int pointerCount=event.getPointerCount();
TouchEvent touchEvent;
for ( int i=0; i< MAX_TOUCHPOINTS ; i++) {
if (i >= pointerCount) {
isTouched[i]= false ;
id[i]=-1;
continue ;
}
int pointerId=event.getPointerId(i);
if (event.getAction() != MotionEvent. ACTION_MOVE && i != pointerIndex) {
// if it's an up/down/cancel/out event, mask the id to see if we should
process it for this touch
// point
continue ;
}
switch (action) {
case MotionEvent. ACTION_DOWN :
case MotionEvent. ACTION_POINTER_DOWN :
touchEvent=touchEventPool.newObject();
touchEvent.type=TouchEvent. TOUCH_DOWN ;
touchEvent.pointer=pointerId;
touchEvent.x=touchX[i]=( int ) (event.getX(i) * scaleX);
touchEvent.y=touchY[i]=( int ) (event.getY(i) * scaleY);
isTouched[i]= true ;
Search WWH ::




Custom Search