Собственно такой код (демо) с некоторыми результатами (отдельное спасибо другим as-программистам

). Все что осталось - корректный поворот вокруг точки на заданном радиусе и указать точку поворота самого
object в его центре:

Код AS3:
package {
import flash.display.Sprite;
import flash.display.DisplayObject;
import flash.events.MouseEvent;
import flash.geom.Point;
public class Main extends Sprite {
var pot:Sprite;
var rect:Sprite;
var rec:Sprite;
var point:Point;
var save1:Point=new Point(0,0);
var save2:Point=new Point(0,0);;
var angle:Number;
public function Main() {
rect=new Sprite();
rect.graphics.lineStyle(1);
rect.graphics.drawRect(0,0,100,100);
rec=new Sprite();
rec.graphics.beginFill(0x000000);
rec.graphics.drawRect(-5,-5,10,10);
addChild(rect);
rect.addChild(rec);
rect.x=300;
rect.y=170;
point=new Point(100,100);
pot=new Sprite;
pot.graphics.beginFill(0xFF0000);
pot.graphics.drawRect(-5,-5,10,10);
addChild(pot);
pot.x=point.x;
pot.y=point.y;
pot.addEventListener(MouseEvent.MOUSE_DOWN, potDownListener);
pot.addEventListener(MouseEvent.MOUSE_UP, potUpListener);
rec.addEventListener(MouseEvent.MOUSE_DOWN, onRecDown);
stage.addEventListener(MouseEvent.MOUSE_UP, onRecUp);
}
private function potDownListener(event:MouseEvent):void{
pot.startDrag(false);
}
private function potUpListener(event:MouseEvent):void{
point.x=pot.x;
point.y=pot.y;
pot.stopDrag();
}
private function onRecDown(event:MouseEvent):void{
rect.startDrag(false);
save1.x=mouseX;
save1.y=mouseY;
addEventListener(MouseEvent.MOUSE_MOVE, onRecMove);
}
private function onRecMove(event:MouseEvent):void{
save2.x = mouseX;
save2.y = mouseY;
var p01:Point = save1.clone().subtract(point);//01 - значит вектор от точки 0 к точке 1
var p02:Point = save2.clone().subtract(point);
var modul01:Number = p01.length;
var modul02:Number = p02.length;
var a:Number = Math.atan2(
(p01.x * p02.y - p02.x * p01.y) / (modul01 * modul02),
(p01.x * p02.x + p01.y * p02.y) / (modul01 * modul02)
);
angle=a * 180 / Math.PI;
rect.rotation=angle;
}
private function onRecUp(event:MouseEvent):void{
rect.stopDrag();
removeEventListener(MouseEvent.MOUSE_MOVE, onRecMove);
}
}
}
Добавлено через 13 минут
Цитата:
Сообщение от OFFmind
Может оффтопик:
Почему бы не использовать класс TransformTool от senocular. Это если важен только результат, а не сам принцип... просто сам недавно сталкивался с подобной проблемой, используя этот можно в Runtime изменять объект как в стандартом Flash редакторе.
А для поворота при нажатии кнопки идеально подходит TweenLite.
Еще раз извините, если это офф-топ, и тут главное - реализовать своими руками)))
|
И как эти классы включить в RunTime ?