1

ビットマップ A には、X/Y 位置が静的である位置があり、ビットマップ B は、画面の下部からユーザーが画面に触れた場所に移動する移動ビットマップです。移動ビットマップが静的ビットマップに到達しても衝突として認識されない場合、移動ビットマップは float を使用して四捨五入し、静的ビットマップは int を使用します。以下はコードのスニペットです。ビットマップがパスを横切るために何を変更する必要があるかを理解したいと思います。

                  canvas.drawBitmap(rock2, 70, 32, null);
    //this is where it checks to see if the moving bitmaps y coordinate is matched to the Y coordinate of the static bitmap
   if(canvas.getHeight() - Math.round(animY*-1) == (canvas.getHeight() - (canvas.getHeight()-32))){

        Log.d("ALERT", "COLLIDE");

      }
    //the Y value is *-1 because the moving bitmap is starting from the bottom of the screen so this converts the value to positive value

計算がずれているのか、それともこの衝突について間違った方法で行っているのだろうか。以下は私の動きのコードスニペットです

               //UP Y ANIMATION
    if(animY*-1 < canvas.getHeight() && !bumpY){

        animY += speedY;

        //IF ROCK IS NOT AT EXTREME LEFT OR EXTREME RIGHT KEEP ON TRACK
        if(animX < (canvas.getWidth()/2) || animX*-1 < (canvas.getWidth()/2) && !bumpX){
            animX += speedX;
            //IF ROCK HITS EDGE LEFT/RIGHT RETURN TO SENDER (INDICATE BUMP)
            if(animX*-1 > (canvas.getWidth()/2) - rock.getWidth()/2 || animX > (canvas.getWidth()/2) - rock.getWidth()/2){
                bumpX = true;
                bumpY = true;
            }
        }

        //IF Y HITS TOP OF SCREEN
        if(animY*-1 > canvas.getHeight()){
            bumpY = true;
        }
    }

    //DOWN Y ANIMATION
    if(animY < 0 && bumpY){ 

        //REVERSE DIRECTION OF Y
         animY  -= speedY;

         //IF ROCK HITS TOP OR SIDE REVERSE X DIRECTION
         if(bumpX || bumpY)
                animX -= speedX;

         //IF AT STARTING POINT
         if(animY > 0){
                bumpY = false;
                bumpX = false;
            }
    }

             //in an ontouch method where the X and Y values are calculated
             case MotionEvent.ACTION_UP:
            finalX = event.getX() - (cross.getWidth() / 2);
            finalY = event.getY() - (cross.getHeight() / 2);
            moveToX = finalX - startX;
            moveToY = finalY - startY;
            speedX = moveToX / 50;
            speedY = moveToY / 50;
            break;

ヒントをいただければ幸いです。ありがとうございます。

4

1 に答える 1

0

これがばかげた答えである場合は申し訳ありませんが、チェックは次のとおりです。

if(canvas.getHeight() - Math.round(animY*-1) >= (canvas.getHeight() - (canvas.getHeight()-32))){

代わりは?("==" を ">=" に変更) そうしないと、岩が正確に (canvas.getheight -32) に着地したときのみをチェックし、それを過ぎてチェックすることはありません。

于 2012-11-06T19:37:01.817 に答える