PDA

Просмотр полной версии : Matrix как отразить (flip) по X


djyamato
28.12.2010, 18:07
Здравствуйте
Подскажите пожалуйста как мне реализовать отражение по Х


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

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 минут

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
ясно, спасибо