Необходимо отразить группу, содержащую объекты, как показано на рисунке.

У меня есть образец изображения того, что я сделал в своем текущем прогрессе.

enter image description here

Цель: отражение объектов должно производиться по осям x и y, как показано на изображении ниже.

enter image description here

0
subrat71 14 Мар 2014 в 16:35

2 ответа

Лучший ответ

Простой код выглядит так:

copiedDisplayObject.scaleY = -1;
copiedDisplayObject.alpha = 0.4;

Это действительно конкретный пример отражения над линией, где линия оказывается осью x. (т.е. y = 0x + 0) Если вы хотите отразить другую линию, вы можете использовать матрицу. Приведенный ниже код сохраняет предыдущие преобразования экранного объекта и отражает их по линии, проходящей через начало координат.

var m:Number = 0.25; //example slope -- from line: y = mx + 0
var tmpMatrix = copiedDisplayObject.transform.matrix;
var relectMatrix:Matrix = new Matrix(1-m*m, 2*m, 2*m, m*m -1);
tmpMatrix.concat(relectMatrix);
copiedDisplayObject.transform.matrix = tmpMatrix;

Я нашел здесь матричную формулу: вопрос math.stackexchange.

0
Community 13 Апр 2017 в 15:19
Спасибо, это более полезно, потому что у меня есть пять условий, например, объект должен отражаться по оси x, оси y, x=1,x=y,x=-y...
 – 
subrat71
14 Мар 2014 в 17:56
Матрица будет работать для невертикальных линий. Вам нужно будет определить вертикальный случай и использовать scaleX *= -1 или использовать матрицу для этого случая (т.е. новую матрицу (-1,0,0,1))
 – 
mfa
14 Мар 2014 в 18:09

Очень простой подход: для отражения у вас должна быть копия объекта, который будет отражаться. Отражение может быть произведено myReflectedObject.scaleY = -1

myReflectedObject.scaleY = -1;
myReflectedObject.alpha = 0.4;
//manage Y position accordingly
1
Nicolas Siver 14 Мар 2014 в 17:19