我正在尝试为位图设置动画。我有一个球,然后移动它。当它到达屏幕的边界时,我希望它像镜子效果一样改变它的方向,我的意思是这样,把球看作下面的点,它下来,击中墙壁并改变它的方向。
. .
. .
. .
____._._______
这是我的代码:
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();
}
问题是,在球到达边界后,它继续前进并离开屏幕并且永远不会回来。任何人都可以帮我这个吗?
由于
答案 0 :(得分: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
答案 1 :(得分:1)
在它到达屏幕边缘后,它将移回屏幕一次,但之后x / y将<&lt;再次高度/宽度,使其再次立即离开屏幕。
你应该有一个名为x_direction
的变量和y
的变量,如果球在边界之外,它会改变(x_direction = -x_direction
),然后不会改变直到另一个边界受到了打击。然后根据方向变量每次移动球。希望我解释说好。