|
|
|||||
Вращение объекта по центру
В примере, если зажать мышь и потянуть, создается прямоугольная форма, при нажатии на кнопку, форма делает поворот. Вращается она из точки 0,0. Нужно, чтобы форма вращалась по центру. А в идеале пивот вращения может находиться в произвольном месте.
import flash.events.MouseEvent; import flash.display.Sprite; import flash.text.TextField; import com.greensock.TweenMax; stage.addEventListener(MouseEvent.MOUSE_DOWN, onDown); var obj:Sprite; var btn:Sprite = simpleButton(); addChild(btn); btn.addEventListener(MouseEvent.CLICK, initRotate); btn.x = (stage.stageWidth/2) - (btn.width/2); btn.y = 200; function initRotate(e:MouseEvent):void { if(obj != null) TweenMax.to(obj, 1, {rotation:90}); } function onDown(e:MouseEvent):void { if(e.target is Sprite) return; obj = new Sprite(); addChild(obj) obj.x = mouseX; obj.y = mouseY; stage.addEventListener(MouseEvent.MOUSE_UP, onUp); stage.addEventListener(MouseEvent.MOUSE_MOVE, onMove); } function onMove(e:MouseEvent):void { obj.graphics.clear(); obj.graphics.beginFill(0x0); obj.graphics.drawRect(0, 0, obj.mouseX, obj.mouseY); } function onUp(e:MouseEvent):void { stage.removeEventListener(MouseEvent.MOUSE_UP, onUp); stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMove); } function simpleButton():Sprite { var sp:Sprite = new Sprite(); sp.buttonMode = true; sp.graphics.beginFill(0xCCCCCC); sp.graphics.drawRect(0,0,100,20); sp.graphics.endFill(); var txt:TextField = new TextField(); sp.addChild(txt); txt.mouseEnabled = false; txt.text = "ROTATE"; txt.autoSize = "left" txt.x = (sp.width/2) - (txt.width/2); return sp; } |
|
|||||
Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
|
Нужно положить объект в контейнер и сдвинуть координаты на минус половину длины и ширины.
Вращать контейнер. |
|
|||||
Т.е. при отпускании мыши сдвигать созданный объект, который внутри контейнера?
Тогда приходится такой мазохизм делать Чтобы при сдвиге объекта он не смещался, приходится в обратную сторону смещать сам контейнер. Как то не очень. Может я не так понял? |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
__________________
Reality.getBounds(this); |
|
|||||
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
alatar, круто. Но у меня вся анимация c использованием твинов, как в таком случае использовать подход с матрицей, не знаю.
|
|
|||||
Так то оно так.
Не могу понять, как применить ваш метод. Я делаю var m:Matrix = mc.transform.matrix; var mtx:Matrix = rotateAroundTo(m, new Point(координаты пивота), new Point(координаты объекта)); TweenMax.to(mc, 1, {x:mtx.tx, y:mtx.ty, rotation:90}); Объект улетает в сторону. |
|
|||||
Координаты, передаваемые в функцию должены быть в локальных координатах объекта, который необходимо повернуть. Углы, если используются, должны быть в радианах.
А дальше, например так.
__________________
משיח לא בא משיח גם לא מטלפן |
Часовой пояс GMT +4, время: 03:25. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|