1

ビットマップを描画するサーフェス ビュー クラスがあり、画面の中央下部からユーザーが画面をクリックした場所までオブジェクトを起動するのに少し問題があります。以下にコード スニペットを示します onTouch メソッドユーザーが画面に触れてから座標を取得し、run メソッドがビットマップを描画します。岩のビットマップは、画面の下部からタッチが行われた場所に移動するために必要なものです。

           public boolean onTouch(View arg0, MotionEvent event) {


    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
        x = event.getX();
        y = event.getY();
        sX = event.getX();
        sY = event.getY();
        fX = fY = dX = dY = sclX = sclY = aniX = aniY = 0;
        break;
    case MotionEvent.ACTION_UP:
        fX = event.getX();
        fY = event.getY();
        dX = fX - sX;
        dY = fY - sY;
        sclX = dX / 30;
        sclY = dY / 30;

        break;
    }
    return true;
}

        //the code that draws and updates the bitmaps on screen
        public void run() {
        while (running) {
            if (!sh.getSurface().isValid())
                continue;

            canvas = sh.lockCanvas();
            canvas.drawRGB(02, 02, 150);
            if (x != 0 && y != 0)
                canvas.drawBitmap(cross, x - (cross.getWidth() / 2), y- (cross.getHeight() / 2), null);

            canvas.drawBitmap(sling,(canvas.getWidth() / 2) - (sling.getHeight() / 2),canvas.getHeight() - sling.getHeight(), null);
            if (fX != 0 && fY != 0) {
                canvas.drawBitmap(rock, (canvas.getWidth()/2) - aniX,(canvas.getHeight()- sling.getHeight()) - aniY,null);

            }

            aniX = aniX + sclX;
            aniY = aniY + sclY;

            sh.unlockCanvasAndPost(canvas);
        }

    }
4

1 に答える 1

2

あなたはあなたの中にいくつかの重要なものが欠けていますonTouch().

public boolean onTouch(View arg0, MotionEvent event) {
    switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN:
        x = event.getX();
        y = event.getY();
        sX = event.getX();
        sY = event.getY();
        fX = fY = dX = dY = sclX = sclY = aniX = aniY = 0;
        break;
      case MotionEvent.ACTION_UP:
        fX = event.getX();
        fY = event.getY();
        dX = fX - sX;
        dY = fY - sY;
        sclX = dX / 30;
        sclY = dY / 30;

        break;
    }
    return true;
}

このコードにはロジックの問題があります。100/100 をタップして、ダウンの場合は 100 に設定されているとしますsXsYアップの場合、 と でアップ座標を取得しますfXfYこれも 100 になります。これはdX = fX - sX=>になりdX = 100 - 100ます。あなたのsclX意志も0そうです。これは、アニメーションがまったくないことを意味します。

画面の中央を計算のベースとして使用する必要があります。ソースは画面中央で、宛先はあなたのタッチです。

于 2012-10-28T12:28:13.517 に答える