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

うーん...キャンバスが画面よりも大きい場合、それが「画面からはみ出す」理由を説明します。

そして、あなたのロジックでは、ボールは同じ場所の間を行ったり来たりする必要があるため、戻ってこないでしょう。ここに私が見るものがあります:

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 に答える
1

画面の端に到達すると、一度画面に戻りますが、x/y が再び < 高さ/幅になり、すぐに画面から外れます。

x_directionのようなものと別の forという名前の変数が必要です。これは、ボールが境界の外にある場合y( ) を変更し、別の境界に到達するまで変更しません。x_direction = -x_direction次に、方向変数に応じて毎回ボールを動かします。私がそれを説明したことを願っています。

于 2013-08-23T15:40:41.887 に答える