2012-07-31 120 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後,我發現你不能在構造函數中聲明一個數組。我所做的只是將浮動陣列移到構造函數之外,一切都很好,儘管我找到了解決方案,但我不確定爲什麼不能在構造函數中聲明它。