我有一个 Flash 应用程序,我在其中执行关于 _background:MovieClip 中心的缩放和旋转操作(代表一本书的一页)。我在这个 MC 的 GESTURE_ROTATE 和 GESTURE_SCALE 事件上有简单的事件监听器,它们更新了一些变量 currentRotation 和 currentScaleX,currentScaleY。然后,我在应用程序的 ENTER_FRAME 事件上触发了以下代码。
我遇到的问题是在将 MC 旋转到大约 60 或 -60 度的限制之外,或者稍微缩放和旋转时,MC 开始振荡并最终疯狂地旋转失控并离开屏幕。我尝试了几件事来调试它,甚至尝试了 Math.flooring currentRotationValue 并将 currentScaleX/Y 的值四舍五入到十分位 (Math.floor(currentScale * 10) / 10),但这些似乎都没有补救它。我在这一点上有点卡住,并尝试尽可能多地进行研究,但找不到任何东西。有什么建议么?在每一帧上执行此操作是否有问题?
private function renderPage(e:Event) {
var matrix:Matrix = new Matrix();
// Get dimension of current rectangle.
var rect:Rectangle = _background.getBounds(_background.parent);
// Calculate the center.
var centerX = rect.left + (rect.width/2);
var centerY = rect.top + (rect.height/2);
// Translating to the desired reference point.
matrix.translate(-centerX, -centerY);
matrix.rotate(currentRotation / 180) * Math.PI);
matrix.scale(currentScaleX, currentScaleY);
matrix.translate(centerX, centerY);
_background.transform.matrix = matrix;
}