이것은 나를 당황하게 만들었다. 실제로 문제의 원인이 무엇인지는 모르겠지만 가능한 한 많은 관련 정보를 제공하려고 노력할 것입니다. 질문이 있으면 물어보세요.
이 advance()
메서드는 0.0025 초마다 한 번씩 호출되며 값이기도합니다 elapsedTime
.
private int speed = 1;
public void advance(float elapsedTime) {
rectangle.x = (int) (rectangle.x - speed * elapsedTime);
}
속도를 0.0000001로 설정해도 x 좌표가 너무 빠르게 왼쪽으로 이동합니다. 그러나 오른쪽으로 이동하려고 할 때마다 :
public void advance(float elapsedTime) {
rectangle.x = (int) (rectangle.x + speed * elapsedTime);
}
전혀 움직이지 않습니다.
어떤 아이디어? 난 당황해!
이는 사각형 좌표가 int로 저장되어 최소 한 번에 1 씩만 변경할 수 있기 때문입니다. 그리기가 너무 자주 실행되기 때문에 왼쪽으로 이동할 때 한 번에 1 픽셀 미만으로 이동할 수 없기 때문에 여전히 매우 빠르게 이동합니다.
오른쪽으로 전혀 움직이지 않는 이유는 반올림 때문입니다. int로 캐스팅 할 때 double은 내림됩니다. 따라서 위치가 5이고 0.00001을 더한 다음 int로 캐스팅하려고하면 위치는 여전히 5가됩니다. 0.000001을 빼면 4로 내림됩니다. 왼쪽 작동합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다