RectF 在 Canvas 上超出边界

RectF goes out of borders on Canvas

提问人:SlimShadys 提问时间:12/16/2020 更新时间:12/17/2020 访问量:66

问:

我正在改进一个名为 Arkanoid 的简单 Android 游戏,我在画布上绘制 RectF 时遇到了一个小问题。

我实现了一个加电选项,如果你使用这个加电,桨从 200 倍的桨上升到 500 倍的桨。

    private RectF r;
    private Paint paint = new Paint();
    private Bitmap flipperBit;

    // Draw Paddle
    flipperBit = BitmapFactory.decodeResource(getResources(), R.drawable.flipper);
    paint.setColor(Color.WHITE);

    if (powerUpTaken) {
        r = new RectF(flipper.getX(), flipper.getY(), flipper.getX() + 500, flipper.getY() + 40);
    } else {
        r = new RectF(flipper.getX(), flipper.getY(), flipper.getX() + 200, flipper.getY() + 40);
    }
    canvas.drawBitmap(flipperBit, null, r, paint);

主要问题是,当我按下电源时,Paddle 成功地从 200 到 500 倾斜,但像下面的 gif 一样超出了边界,认为它仍然是一个 200 倍的 Paddle。 请注意,所有这些都是写在onDraw覆盖函数中的。

我知道,我需要实现一种方法来拉伸 Paddle x 秒,但到目前为止,我想先让它工作。

任何建议将不胜感激。:)

1.st

Java Android-Studio Android- 查看 OnDraw

评论

1赞 emandt 12/16/2020
当然,您必须检查(伪代码)“(Bitmap.getWidth()+500) < Screen.getWidth()”,然后拒绝 Canvas 在其右侧绘制更多内容。
0赞 SlimShadys 12/16/2020
所以我是这样检查的:如果位图 + 500 的宽度是屏幕宽度 (1080) 的<,那么将矩形画到画布中,但它仍然显示相同的错误。也许我没有完全得到你的回复,但我感谢你的努力。
0赞 SlimShadys 12/16/2020
Comunque, vedo che sei Italiano, puoi anche contattarmi tramite mail o su Telegram (“SlimShadyss”) :)

答:

1赞 emandt 12/17/2020 #1
  //set to ZERO if not needed
final cMargin = 10;
int cPaddingWidth;
final int cPaddingHeight = 40;
final RectF cRectF = new RectF();
if (powerUpTaken) cPaddingWidth = 500;
else cPaddingWidth = 200;
cRectF.left = Math.max(cMargin, flipper.getX());
cRectF.right = cRect.left + cPaddingWidth;
if (cRectF.right > (this.getWidth() - cMargin)) {
    cRectF.left = (this.getWidth() - cMargin) - cPaddingWidth;
    cRectF.right = cRectF.left + cPaddingWidth;
}
cRectF.top = Math.max(0, flipper.getY());
cRectF.bottom = cRect.top + cPaddingHeight;
r.set(cRectF);