我正在开发一款游戏,我正在使用postDelay()
它来使动画更流畅。我遇到的一个问题是,如果我在其中执行该方法,postDelay()
则该方法操作的变量不再以意想不到的方式发生变化。这会导致奇怪的行为,例如位图无法正确绘制。
以下是麻烦的部分:
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) { }
}
当rotate()
被快速调用时,我认为变量angle
会以某种方式搞砸。当我间隔大约一秒钟调用时不会发生这种情况rotate()
,但如果我做得非常快,angle
则仅假设为 0、90、180 或 270 的 0、90、180 或 270 会更改为 45 度或其他。我不知道为什么调试没有提供丰硕的成果。那么我如何确保angle
以这种意想不到的方式进行修改呢?