У меня есть приложение Flash, где я выполняю операцию масштабирования и вращения вокруг центра _background: MovieClip (представляющий страницу книги). У меня есть простые прослушиватели событий в событиях GESTURE_ROTATE и GESTURE_SCALE этого MC, которые обновляют некоторые переменные currentRotation и currentScaleX, currentScaleY. Затем я вызываю следующий триггер кода в событии ENTER_FRAME приложения.Странные проблемы с стабильностью с матричной шкалой/вращением в Actionscript
Проблема, с которой я сталкиваюсь, заключается в том, чтобы вращать MC за пределы приблизительно 60 или -60 градусов или слегка уменьшаться и вращаться, МС начинает колебаться и, наконец, вращаться без контроля и с экрана. Я пробовал несколько вещей, чтобы отладить его, и даже попытался выполнить 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;
}
Как раз мысль, метод getBounds() оценивает эти границы как вертикальный квадрат, а не исходные размеры. Интересно, действительно ли то, что вы действительно ищете, это '.width' /' .scaleX'? – Atriace
@Bradley Bossard Возможно, вы захотите проверить [MatrixTransformer] (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/fl/motion/MatrixTransformer.html), и это метод rotateAround ... –
@ GeorgeProfenza Спасибо Джорджу за предложение. Мне удалось решить мою проблему с помощью ответа ниже, и я немного устарел, чтобы получить его, но я действительно ценю предложение и проведу его в будущем. –