How do I stop the object from going outside the screen?

Muddy :
public class MovingBagView extends View {

    private Bitmap bag[] = new Bitmap[2];
    private int bagX;
    private int bagY = 1000;
    private int bagSpeed;
    private Boolean touch = false;
    private int canvasWidth, canvasHeight;
    private Bitmap backgroundImage;
    private Paint scorePaint = new Paint();
    private Bitmap life[] = new Bitmap[2];

    public MovingBagView(Context context) {
        super(context);
        bag[0] = BitmapFactory.decodeResource(getResources(), R.drawable.bag1);
        bag[1] = BitmapFactory.decodeResource(getResources(), R.drawable.bag2);
        backgroundImage = BitmapFactory.decodeResource(getResources(), R.drawable.background);
        scorePaint.setColor(Color.BLACK);
        scorePaint.setTextSize(40);
        scorePaint.setTypeface(Typeface.DEFAULT_BOLD);
        scorePaint.setAntiAlias(true);
        life[0] = BitmapFactory.decodeResource(getResources(), R.drawable.heart);
        life[1] = BitmapFactory.decodeResource(getResources(), R.drawable.heart_grey);
        bagX = 10;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvasWidth = canvas.getWidth();
        canvasHeight = canvas.getHeight();
        canvas.drawBitmap(backgroundImage, 0, 0, null);
        int minBagX = bag[0].getWidth();
        int maxBagX = canvasWidth - bag[0].getWidth() * 3;
        bagX = bagX + bagSpeed;
        if (bagX < minBagX) {
            bagX = minBagX;
        }
        if (bagX < maxBagX) {
            bagX = maxBagX;
        }
        bagSpeed = bagSpeed + 2;
        if (touch) {
            canvas.drawBitmap(bag[1], bagX, bagY, null);
        }
        else {
            canvas.drawBitmap(bag[0], bagX, bagY, null);
        }
        canvas.drawText("Score : ", 20, 60, scorePaint);
        canvas.drawBitmap(life[0], 500, 10, null);
        canvas.drawBitmap(life[0], 570, 10, null);
        canvas.drawBitmap(life[0], 640, 10, null);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            touch = true;
            bagSpeed = -12;
        }
        return true;
    }
}

I can tap on the screen to move the object to the left, and the more I tap on it, the further it should move to the left. However, the problem is that the object moves too much to the right, and goes off the screen. I want it to stop at the edge, so its still visible on the screen. Furthermore, the object is positioned in the center bottom of the screen, how do I position it to the bottom left corner? You can see how it works by looking at the GIF below.

game application

Furkan Yurdakul :

This condition is never applied on the code you've provided. It continues to exceed the max value.

if (bagX < maxBagX) {
       bagX = maxBagX;
   }

It should look like this:

if (bagX >= maxBagX) {
       bagX = maxBagX;
   }

And the maxBagX value should be canvasWidth - bag[0].getWidth() in order to achieve the right edge of the bag itself. (Unless you're using the multiply 3 times for a different reason, this should be the solution.)

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=152814&siteId=1