PDA

Просмотр полной версии : Вращение MovieClip


kompaky
14.06.2013, 18:30
Управление прямоугольником. Дан некий прямоугольник. Пользователь должен иметь возможность менять высоту, ширину прямоугольника, а также поворот относительно любой из его вершин. Обязательно наличие координатных осей и сетки;
Вечер добрый.
Все строится программно.
Сетку и изменение размера реализовал.
Вопрос насчет вращения. Вращать относительно точки регистрации это ясно. А вот как с другими вершинами?

Stage.scaleMode = "noScale";
import mx.transitions.Tween;
import mx.transitions.easing.*;
this.createEmptyMovieClip("setka",0);
setka.lineStyle(1,0x000000);
for (var i=0; i < 50; i++) {
setka.moveTo (i*10,0);
setka.lineTo(i*10,500);
}
for (var j=0; j < 50; j++) {
setka.moveTo (0,j*10);
setka.lineTo(550,j*10);
}
setka.lineStyle(1,0x00ff00);
setka.moveTo(250,0);
setka.lineTo(250,500);
setka.moveTo(0,250);
setka.lineTo(500,250);


mc = _root.createEmptyMovieClip("sqr",this.getNextHighestDepth());
mc._x=250;
mc._y=250;
sqr.lineStyle(1, 0x33CCCC);
sqr.beginFill(0x333333);
sqr.moveTo(0,0);
sqr.lineTo(60, 0);
sqr.lineTo(60,40);
sqr.lineTo(0, 40);
sqr.lineTo(0, 0);
sqr.endFill();


bt.onPress=function(){


sqr.onReleaseOutside = function() {
//if ((_xmouse>=this._width-10) && (_xmouse<=this._width) && (_ymouse>=this._height-10) && (_ymouse<=this._height)){
this.varTween = new Tween(this, "_width", Regular.easeOut, this._width, _xmouse-250, 0.5, true);
this.varTween = new Tween(this, "_height", Regular.easeOut, this._height, _ymouse-250, 0.5, true);}//
sqr.onRelease= function() {
//if ((_xmouse>=this._width-10) && (_xmouse<=this._width) && (_ymouse>=this._height-10) && (_ymouse<=this._height)){
this.varTween = new Tween(this, "_width", Regular.easeOut, this._width, _xmouse-250, 0.5, true);
this.varTween = new Tween(this, "_height", Regular.easeOut, this._height, _ymouse-250, 0.5, true);}//

}

bt2.onRelease=function(){
sqr.onPress = function(){

this._rotation+=3;
}

}

Bletraut
16.06.2013, 21:26
Ну можно реализовать поворот программно, т.е просчитывать все точки через синус и косинус или же через матрицу.

Sergey_A
17.06.2013, 12:14
Возможно, проще будет сделать 4 прямоугольника с разными точками регистрации, и заменять их соответственно при начале вращения вокруг данной вершины (точки регистарции). Положение других вершин нужно будет вычислять каждый раз по окончании вращения, чтобы другие прямоугольники вставлялись правильно.