PDA

Просмотр полной версии : Центр трансформации MovieClip программно


Prometei1599
22.02.2011, 17:26
Добрый вечер коллеги!
Вопрос в следующем: как в программно создаваемом MovieClip'е
_root.createEmptyMovieClip("MC", _root.getNextHighestDepth);
установить центр(точку) трансформации.
Заранее спасибо!

rainbowrussia
22.02.2011, 17:30
Создать вспомогательный клип, в нем создать ваш "MC", сдвинуть "MC" в соответвтующие координаты, например _x = "минус половина ширины" и _y = "минус половина высоты" и вращать вспомогательный клип. Вроде так.

Prometei1599
24.02.2011, 15:05
Добрый день!
В вспомогательном MovieClip разместил точку регистрации в центре. Загрузил изображение в целевой MovieClip, задав ему координаты _x и _y половине ширины и высоты, и разместил его в вспомогательном MC.
Итог можно увидеть во вложении.

Вопрос: что я не так сделал?=(

rainbowrussia
24.02.2011, 19:48
Могу открыть только формат CS3. Если я правильно понимаю, вам надо сделать следующее:
1) создать клип в текущем месте - _root.createEmptyMovieClip
2) создать клип внутри созданного - _root["preloadClip_0"].createEmptyMovieClip
3) загрузить картинку в клип из пункта 2
4) сдвинуть клип из пункта 2, он сдвинется относительно клипа из пункта 1
5) вращать клип из пункта 1

Вот упрощенный код:

var newClip = _root.createEmptyMovieClip("preloadClip_0", _root.getNextHighestDepth());
var newClip2 = newClip.createEmptyMovieClip("preloadClip_1", newClip.getNextHighestDepth());


var mcl:MovieClipLoader = new MovieClipLoader();
var listener:Object = new Object();
mcl.addListener(listener);

listener.onLoadInit = function(target_mc):Void{
target_mc._x = -target_mc._width/2;
target_mc._y = -target_mc._height/2;
}

mcl.loadClip("mno0.jpg", newClip2);

newClip._x = Stage.width / 2;
newClip._y = Stage.height / 2;
newClip._rotation = 45;

Prometei1599
24.02.2011, 20:01
Почти так. Немного уточню, может что-то упустил:

import flash.display.BitmapData;
import flash.geom.Matrix;

var mtrx = new Matrix();
mtrx.scale(1.0, 1.0);
var mcl:MovieClipLoader = new MovieClipLoader();
var listener:Object = new Object();
mcl.addListener(listener);

listener.onLoadInit = function(target_mc):Void{
var bmd = new BitmapData(187, 187, true, 0x00000000);
bmd.draw(target_mc, mtrx, null, "normal", null, true);
mc.attachBitmap(bmd, d2, "auto", true);

target_mc._x = -target_mc._width/2;
target_mc._y = -target_mc._height/2;

mc.onPress = function(){
this._xscale +=10;
this._yscale +=10;
}

removeMovieClip(target_mc);
}

var newClip = _root.createEmptyMovieClip("preloadClip_0", _root.getNextHighestDepth());
mcl.loadClip("images/mno0.jpg", newClip);


Где mc-уже готовый MovieClip с точкой регистрации в геометрическом центре(он же вспомогательный MC)

rainbowrussia
24.02.2011, 20:26
Я не совсем "догоняю" что у вас происходит - вы создаете в корне клип, в него грузите картинку, отрисовываете картинку в другой клип, затем зачем-то двигаете загруженный клип и сразу его удаляете.
Сохраните свой исходник с формате CS3, я вечером посмотрю что у вас там такое.

Prometei1599
24.02.2011, 20:59
Прошу прощения. Накрутил лишнего в этот код...
Задача в том, чтобы загрузить изображение, отрисовать ее в целевой MovieClip. А затем разместить целевой MovieClip во вспомогательный, таким образом, чтобы масштабирование производилось от геометрического центра.

Prometei1599
28.02.2011, 15:51
Добрый день!
Вопрос решен и тему можно закрывать!)
Если кому интересно, вот код:
import flash.display.BitmapData;
import flash.geom.Matrix;

var mtrx = new Matrix();
mtrx.scale(1.0, 1.0);
var mcl:MovieClipLoader = new MovieClipLoader();
var listener:Object = new Object();
mcl.addListener(listener);

listener.onLoadInit = function(target_mc):Void{
var bmd = new BitmapData(187, 187, true, 0x00000000);
bmd.draw(target_mc, mtrx, null, "normal", null, true);
mc.attachBitmap(bmd, d2, "auto", true);
mc._x = -mc._width/2;
mc._y = -mc._height/2;
}

mainMC.onPress = function(){
mainMC._rotation +=45;
}

var mc = mainMC.createEmptyMovieClip("innerMC", mainMC.getNextHighestDepth());
var preloadClip = mc.createEmptyMovieClip("preloadClip", mc.getNextHighestDepth());
mcl.loadClip("images/mno0.jpg", preloadClip);
Где mainMC готовый MovieClip, mc - вспомогательный и preloadCLip - для загрузки и отрисовки изображения.
Отдельное спасибо rainbow!)