检查画布android中的线条和圆圈的碰撞

时间:2012-07-31 03:51:24

标签: android function android-canvas collision lines

我正在尝试检查线和圆之间的碰撞,如果圆圈击中线,它会将布尔值更改为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问题出现在主要的更新功能中 我认为我使用了错误的功能,我该怎么做才能解决它?

谢谢!

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。显然问题在于浮点数组;在我的应用程序中,我在构造函数中声明了float数组。经过长时间的研究和重新检查我的logcat,我发现你不能在构造函数中声明一个数组。我所做的只是将float数组移到构造函数之外,一切都没问题,即使我找到了解决方案,我也不确定为什么你不能在构造函数中声明它..