Застрял снова ... Я пытаюсь адаптировать rotate()
код в нижней части так, что вращение является абсолютным, т.е. rotate(33)
вращается к этот угол не на, что число степеней.Абсолютное вращение с использованием матрицы?
И я терплю неудачу. Моя попытка ниже. Я думал, что смогу просто установить поворот после перевода матрицы, но ничего не делает. Попытка прочитать о Матрицах заставит мою голову взорваться. Простая вещь, которую я здесь отсутствует?
public function myRotate(angle:Number):void
{
trace("angle", angle);
var m:Matrix = this.transform.matrix;
var aroundPoint:Point = resetCenterPoint(this, this.width/2, this.height/2);
var cm:Matrix = new Matrix(1, 0, 0, 1, -aroundPoint.x, -aroundPoint.y);
m.concat(cm);
// I thought I could apply the matrix to shift the reg point,
// set the absolute rotation
// then use that matrix for when it gets shifted back
// but it doesn't work.
this.transform.matrix = m;
this.rotation = angle;
m = this.transform.matrix;
//m.rotate(Math.PI * angle/180);
var rcm:Matrix = new Matrix(1, 0, 0, 1, aroundPoint.x, aroundPoint.y);
m.concat(rcm);
this.transform.matrix = m;
}
Этот код работает, но повороты относительны (т.е. нарастающим итогом).
public function rotate(angle:Number):void
{
var m:Matrix = this.transform.matrix;
var aroundPoint:Point = resetCenterPoint(this, this.width/2, this.height/2);
var cm:Matrix = new Matrix(1, 0, 0, 1, -aroundPoint.x, -aroundPoint.y);
m.concat(cm);
m.rotate(Math.PI * angle/180);
var rcm:Matrix = new Matrix(1, 0, 0, 1, aroundPoint.x, aroundPoint.y);
m.concat(rcm);
this.transform.matrix = m;
}
private function resetCenterPoint(obj:DisplayObject, orgX:Number, orgY:Number):Point
{
var m:Matrix = obj.transform.matrix;
var orgXY:Point = m.deltaTransformPoint(new Point(orgX, orgY));
orgXY.x += m.tx;
orgXY.y += m.ty;
return orgXY;
}
Что делать, если вы превращаете относительную функцию в абсолютную, передавая ей значение «целевого угла» - «значение текущего угла»? Таким образом, функция абсолютного вращения является лишь оберткой для относительной. Я не уверен, что это должен быть комментарий или ответ. – null
@null ... Да, я идиот (или предположительно математически-фобический или просто усталый). 'var newAngle: Number = angle - this.rotation;', кажется, вычисляет правильный относительный угол, основанный на указанном угле. Опубликуйте в качестве ответа, если вы хотите получить очки. –