4

線と円の間の衝突をチェックしようとしています。円が線に当たると、ブール値がtrueに変更され、触れられないとfalseに戻ります。キャンバスとサーフェス ビューを使用しています。

衝突をチェックするためのコードは次のとおりです。これは機能せず、エラーになりました。

@Override
public void run() {
while(runnable)
    {
        if(!holder.getSurface().isValid()){
            continue;
        }
        Canvas mCanvas = holder.lockCanvas();
        update(mCanvas);
        values = new Values(mCanvas);
        createPaints();
        drawBackground(mCanvas);
        drawObjects(mCanvas);
        holder.unlockCanvasAndPost(mCanvas);


    }
}

これで、更新で衝突が処理されます。

private void update(Canvas c) {
    ball.update(c, checkLinesCollision(values.level1, ball.getX(), ball.getY()));
  //takes a canvas, and a boolean
}

boolean checkLinesCollision(float[] f,float x,float y){
    int c = 0;
    for(int i = 0; i < f.length; i+=4){
        float x1 = f[i];
        float y1 = f[i+1];
        float x2 = f[i+2];
        float y2 = f[i+3];

        if (x> x1 && x<x2 && y>y1 && y>y2){

            c++;

        }
    }
        if(c>0){return true;}else{return false;}

}

レベルの値

 float yLow = c.getHeight()-c.getHeight()/4;

    level1 = new float[]{0,yLow,c.getWidth(),yLow,
                      40,c.getHeight()/2,300,c.getHeight()/2};

ボール更新機能:

public void update(Canvas c, boolean b) {

    if(b){

        dy=-dy;
        b = false;
    }
    y -= dy;
    dy--; 
}

現在、logcat によると、問題はメインの更新機能にあります。
間違った機能を使用していると思います。修正するにはどうすればよいですか?

ありがとう!

4

1 に答える 1

0

私は解決策を見つけました。どうやら問題は float 配列にありました。私のアプリでは、コンストラクターで float 配列を宣言しました。長い間 Web で調査し、logcat を再確認した後、コンストラクターで配列を宣言できないことがわかりました。私がしたことは、float配列をコンストラクターの外側に移動することだけで、解決策が見つかったにもかかわらず、すべてが問題ありませんでした.コンストラクターで宣言できない理由がわかりません..

于 2012-07-31T06:48:55.680 に答える