Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Matrix как отразить (flip) по X (http://www.flasher.ru/forum/showthread.php?t=148352)

djyamato 28.12.2010 18:07

Matrix как отразить (flip) по X
 
Здравствуйте
Подскажите пожалуйста как мне реализовать отражение по Х


Для поворота использую следующий код (повороты строго на +-90 градусов использую)
Код AS3:

rotAngle=event.messageObj.message*Math.PI/180;
trace("rotAngle "+rotAngle);
transformMatrix.tx -= registrationPoint.x;
transformMatrix.ty -= registrationPoint.y;
transformMatrix.rotate(rotAngle);
transformMatrix.tx += registrationPoint.x;
transformMatrix.ty += registrationPoint.y;
BITMAP.transform.matrix=transformMatrix;

Также мне нужно чтобы и повернутую можно было отражать
Подскажите как сделать

Wolsh 28.12.2010 18:35

.scale(-1, 1) не помогает?

djyamato 28.12.2010 18:38

к сожалению не помогает, картинка смещается влево при первом флипе (но отражается, конечно), и смещается на свое место при втором флипе (тоже отразившись)

Добавлено через 6 минут
Код AS3:

var matrix:Matrix = BITMAP.transform.matrix;
matrix.a=-matrix.a;
if(matrix.a<0){
  matrix.tx+=BITMAP.width
}else{
  matrix.tx-=BITMAP.width;
}
BITMAP.transform.matrix=matrix;

Но этот механизм неправильно работает если повернуть сначала картинку на 90 градусов, к примеру, без поворота работает правильно

Wolsh 28.12.2010 18:58

Так Вы за логикой преобразований то следите, Флэш же не телепат - он делает точно то, что Вы говорите, а не то, что Вы думаете. Повернуть и отразить это совсем не то же самое, что отразить и повернуть. И конечно, отразить относительно Top-Left не то же самое, что отразить относительно центра. Координаты придется корректировать, а как Вы хотели?)))

Добавлено через 24 минуты
Иногда помогает просто разместить изображение в объекте так, чтобы точка трансформации была в его центре. Это сразу делает большинство преобразований близкими к человеческой интуиции. А вообще суть в том, что иногда текущее действие надо "вставлять" ДО предыдущих. Это реализовано, в частности, в Matrix3D, где преобразование можно добавить как в начало, так и в конец "списка".

djyamato 28.12.2010 19:43

ясно, спасибо


Часовой пояс GMT +4, время: 11:43.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.