2012-11-06 4 views
1

비트 맵 A는 X/Y 위치가 정적 인 위치를 가지며 비트 맵 B는 화면 맨 아래에서 사용자가 화면을 터치하는 위치로 이동하는 비트 맵을 이동합니다. 움직이는 비트 맵이 정적 비트 맵에 도달했지만 충돌로 인식되지 않으면 움직이는 비트 맵은 반올림 한 float를 사용하고 정적 비트 맵은 int를 사용합니다. 다음 코드 조각은, 내 계산이 꺼져있는 경우2D 충돌 비트 맵 관련 문제

    canvas.drawBitmap(rock2, 70, 32, null); 
    //this is where it checks to see if the moving bitmaps y coordinate is matched to the Y coordinate of the static bitmap 
    if(canvas.getHeight() - Math.round(animY*-1) == (canvas.getHeight() - (canvas.getHeight()-32))){ 

     Log.d("ALERT", "COLLIDE"); 

     } 
    //the Y value is *-1 because the moving bitmap is starting from the bottom of the screen so this converts the value to positive value 

가 궁금 충돌을 고려해야 할 경로를 교차 내 비트 맵에 대한 변경이 필요한 것을 파악하려는, 또는 나는이 충돌에 대해 갈거야 잘못된 길. 다음은 내 운동 코드입니다.

   //UP Y ANIMATION 
    if(animY*-1 < canvas.getHeight() && !bumpY){ 

     animY += speedY; 

     //IF ROCK IS NOT AT EXTREME LEFT OR EXTREME RIGHT KEEP ON TRACK 
     if(animX < (canvas.getWidth()/2) || animX*-1 < (canvas.getWidth()/2) && !bumpX){ 
      animX += speedX; 
      //IF ROCK HITS EDGE LEFT/RIGHT RETURN TO SENDER (INDICATE BUMP) 
      if(animX*-1 > (canvas.getWidth()/2) - rock.getWidth()/2 || animX > (canvas.getWidth()/2) - rock.getWidth()/2){ 
       bumpX = true; 
       bumpY = true; 
      } 
     } 

     //IF Y HITS TOP OF SCREEN 
     if(animY*-1 > canvas.getHeight()){ 
      bumpY = true; 
     } 
    } 

    //DOWN Y ANIMATION 
    if(animY < 0 && bumpY){ 

     //REVERSE DIRECTION OF Y 
     animY -= speedY; 

     //IF ROCK HITS TOP OR SIDE REVERSE X DIRECTION 
     if(bumpX || bumpY) 
       animX -= speedX; 

     //IF AT STARTING POINT 
     if(animY > 0){ 
       bumpY = false; 
       bumpX = false; 
      } 
    } 

      //in an ontouch method where the X and Y values are calculated 
      case MotionEvent.ACTION_UP: 
      finalX = event.getX() - (cross.getWidth()/2); 
      finalY = event.getY() - (cross.getHeight()/2); 
      moveToX = finalX - startX; 
      moveToY = finalY - startY; 
      speedX = moveToX/50; 
      speedY = moveToY/50; 
      break; 

아무쪼록 잘 부탁드립니다. 감사합니다. 대신

if(canvas.getHeight() - Math.round(animY*-1) >= (canvas.getHeight() - (canvas.getHeight()-32))){ 

:이 바보 같은 대답이지만, 당신의 검사를 할 필요가있는 경우

+0

Log.d 메시지에 다음을 추가했습니다. 시간과 관련하여 바위의 좌표가 무엇인지 표시하시오. 확신 할 수는 없지만, "if (canvas.getHeight() - Math.round (animY * -1) == (canvas.getHeight() - (canvas.getHeight()) -32))) "... 그리고 그 결과를 출력하여 각 단계에서 결과가 무엇인지 확인하십시오. –

+0

움직이는 비트 맵은 완벽한 순서로 움직이지 않으며 그 움직임도 기록됩니다. 시작 지점에서부터 시작하여 충돌을 감지하고 고양이에 로그인하는 방법에 따라 시작 지점에 더 가까이 다가 가면 계산 방법은 더 멀리 떨어져 있지만 그다지 멀리 떨어지지는 않습니다. 어쩌면 반올림 문제일까요? 그렇다면 나는 어떤 방향으로의 축복을 필요로한다. 귀하의 의견을 보내 주셔서 감사합니다 – kabuto178

답변

0

미안? ("=="를 "> ="로 변경하십시오.) 그렇지 않으면 바위 지대가 정확히 맞았을 때 (canvas.getheight -32)를 확인하는 것보다 더 많이 체크하지 않고

+0

추가 사항을 보내 주셔서 감사합니다. 그 점은 중요합니다. 그러나 움직이는 록이 정적 인 것을 정확하게 쳐 드리고 싶습니다. X와 Y는 모두 – kabuto178

+0

입니다. 질문을 잘못 읽어 주셔서 죄송합니다. 잡았다. 이제 저는 이것이 반올림 문제라고 생각하기 시작했습니다 ...하지만 또한 - 바위는 정확하게 착륙해야합니까? 또는 +/- 10 포인트 떨어져있을 수 있습니까? 바위를 정확히 한 지점에 올리는 것은 조금 어렵습니다 ... 사용자 관점에서 ... –

+0

그냥 정적 비트 맵의 ​​다른 가장자리 나 경계를 만져야하므로 범위가 전체 폭이나 높이 또는 정적 비트 맵. 네, 반올림이 확실히할만한 부분을 가지고 있다고 생각합니다. hehe에 따라 나를 도와 줄 수있는 약간의 조정할 조언이 필요합니다. – kabuto178