2012-07-31 4 views
4

선과 원 사이의 충돌을 확인하려고합니다. 원이 선에 닿으면 부울을 참으로 변경하고 한 번 터치하지 않으면 변경됩니다. 거짓으로 돌아 간다. 나는 캔버스와 표면을 사용하고 있습니다. 여기 캔버스 안의 선과 원의 충돌을 확인하십시오.

작동 및 오류에 종료되지 않은 충돌을 확인하는 내 코드입니다 : 레벨에 대한

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;} 

} 

값 : 이제 충돌 업데이트에서 처리

@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); 


    } 
} 

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

+0

@ 0gravity 내가 안드로이드 런타임 문제가있는 정확한 위치는 \t \t입니다. (. – Baruch

답변

0

해결책을 찾았습니다. 분명히 문제는 float 배열에있었습니다. 내 애플 리케이션에서, 나는 생성자에서 float 배열을 선언했다. 웹에서 조사하고 logcat을 다시 검사 한 후 오랜 시간이 지나면 생성자에서 배열을 선언 할 수 없다는 것을 알았습니다. 모두 내가 만든 생성자 밖으로 플로트 배열을 이동하고 모든 해결책을 찾았는데, 나는 당신이 왜 생성자에서 선언 할 수 없는지 모르겠다.

관련 문제