0

我正在尝试为位图制作动画。我有一个球,然后移动它。当它到达屏幕的边界时,我希望它像镜子一样改变它的方向,我的意思是这样,把球想象成下面的点,它下来,撞到墙上并改变它的方向。

.          .
 .       .
  .    .
____._._______

这是我的代码:

public class DrawShapes extends View{

Bitmap ball;
int x,y;

public DrawShapes(Context context) {
    super(context);
    ball=BitmapFactory.decodeResource(getResources(),R.drawable.ball);
    x=0;
    y=0;
}

@Override
protected void onDraw(Canvas canvas) {      
    super.onDraw(canvas);       

    if(x<canvas.getWidth())
        x+=5;
    else
        x-=5;
    if(y<canvas.getHeight())
        y+=5;
    else
        y-=5;
    canvas.drawBitmap(ball, x, y, new Paint());
    invalidate();

}

问题是,在球到达边界后,它会继续前进并走出屏幕,再也不会回来。谁能帮我这个?

谢谢

4

2 回答 2

1

在它到达屏幕边缘后,它会再次移动到屏幕上,但随后 x/y 将再次 < height/width,导致它再次直接离开屏幕。

你应该有一个变量 likex_direction和另一个 for y,如果球在边界之外,它会改变 ( x_direction = -x_direction),然后直到击中另一个边界才会改变。然后每次根据方向变量移动球。希望我解释清楚。

于 2013-08-23T15:40:41.887 回答
1

嗯......如果画布比屏幕大,那就可以解释为什么它“走出屏幕”了。

它不会回来,因为按照你的逻辑,球应该在同一个点之间来回反弹。这是我看到的:

canvas.width == 10

iteration1
x == 5
x += 5
x == 10

iteration2
x == 10
x -= 5
x == 5

iteration3
x == 5
x += 5
x == 10
于 2013-08-23T15:30:12.197 回答