Search code examples
javaandroidcollision-detection

Android - Retro Squash Game - racket/screen sides collision


I am reading "Learning Java by Building Android Games" and in a Retro Squash Game example I don't know how to implement collision detection for the racket. The movement of the racket uses onTouchEvent. I have tried to implement an if statement but it deosn't get checked until the next touch event- so it doesn't work properly. Please help.

    //Event that handles in which direction is the racket moving according to where is the user touching the screen
    @Override
    public boolean onTouchEvent(MotionEvent motionEvent) {
        //gets the movement action without the pointers(ACTION_MASK) ??? -U: handles multitouch

        switch (motionEvent.getAction() & MotionEvent.ACTION_MASK) {
            //what happens if user touches the screen and holds
            case MotionEvent.ACTION_DOWN:
                //if the screen was touched on the right side of the display than move the racket right
                if (motionEvent.getX() >= (screenWidth / 2) && racketPosition.x <= screenWidth) {
                    racketIsMovingLeft = false;
                    racketIsMovingRight = true;
                } else if (motionEvent.getX() < (screenWidth / 2) && racketPosition.x >= 0) {
                    racketIsMovingLeft = true;
                    racketIsMovingRight = false;
                } else {
                    racketIsMovingLeft = false;
                    racketIsMovingRight = false;
                }

                break;
            //when the user lets go of the screen the racket immediately stops moving
            case MotionEvent.ACTION_UP:
                racketIsMovingLeft = false;
                racketIsMovingRight = false;
                break;
        }
        return true;
    }

Solution

  • Ok. I have found the solution. I wasn't looking at the right piece of code - sorry. I have edited the piece which is responsible for changing the racketPoint.x of the racket. Here it is:

        public void updateCount() {
            //change the racket position according to the movement
            if (racketIsMovingRight && (racketPosition.x+racketWidth/2)<=screenWidth) {
                racketPosition.x += racketSpeed;
            }
    
            if (racketIsMovingLeft && (racketPosition.x-racketWidth/2)>=0) {
                racketPosition.x -= racketSpeed;
            }
    

    //rest of the code