0
게임을 진행하면서 애니메이션을 더 매끄럽게 만들기 위해 postDelay()
을 사용하고 있습니다. 내가 실행중인 문제는 postDelay()
메서드를 실행하면 메서드가 작동하는 변수가 예기치 않게 변경되지 않는다는 것입니다. 비트 맵이 제대로 그리지 않는 등 이상한 동작이 발생합니다.예상치 못한 변수 변경을 처리하는 핸들러 postDelay()가 발생했습니다.
rotate()
가 매우 빠르게이라고
synchronized private void rotate(int dir) {
final int originalAngle = angle; //angle is the suspicious variable
final int steps = 4;
for (int i = 0; i != steps; i++) {
smoothAnimateRotate(i, steps, originalAngle, dir);
}
finishAnimateRotate(steps);
}
private void smoothAnimateRotate(final int i, final int steps, final int originalAngle, final int dir) {
handler.postDelayed(new Runnable() {
@Override
public void run() {
angle = originalAngle + dir*(90*(i+1))/steps;
rotateStep();
}
}, 100 * (i + 1));
}
private void rotateStep() {
angle = (angle+1800) % 360;
viewdx = (int) (Math.cos(radify(angle))*(1<<16));
viewdy = (int) (Math.sin(radify(angle))*(1<<16));
moveStep();
}
private void moveStep() {
notifyViewerRedraw() ;
try {
Thread.currentThread().sleep(25);
} catch (Exception e) { }
}
, 나는 어떻게 든 변수 angle
가 엉망이됩니다 생각 : 여기
rotate()
을 호출하면 이런 일이 발생하지 않지만, 내가 매우 빠르게 수행하면
angle
은 0, 90, 180 또는 270으로 45도 또는 다른 것으로 변경됩니다. 나는 이유를 알 수 없으며 디버깅은 유익한 결과를 제공하지 못했습니다. 그렇다면 어떻게하면
angle
이 예상치 못한 방식으로 수정 될 수 있습니까?