2012-07-31 104 views
4

我想检查线和圆之间的碰撞,如果圆击中线,它会工作改变一个布尔值为真,一旦它没有触及,它会改变它回到错误。我正在使用画布和表面视图。检查线和一个圆圈在帆布的碰撞android

这里是我的检查碰撞的代码,没有工作,在错误结束了:

@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问题是在主要的更新功能。
我认为我使用了错误的功能,我能做些什么来解决它?

谢谢!

+0

logcat说的是什么? – 0gravity 2012-07-31 03:58:22

+0

@ 0gravity,我有Android运行时问题,确切的地方是\t \t ball.update(c,checkLinesCollision(values.level1,ball.getX(),ball.getY())); – Baruch 2012-07-31 04:13:22

回答

0

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