Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Центр трансформации MovieClip программно (http://www.flasher.ru/forum/showthread.php?t=151104)

Prometei1599 22.02.2011 17:26

Центр трансформации MovieClip программно
 
Добрый вечер коллеги!
Вопрос в следующем: как в программно создаваемом MovieClip'е
Код AS1/AS2:

_root.createEmptyMovieClip("MC", _root.getNextHighestDepth);

установить центр(точку) трансформации.
Заранее спасибо!

rainbowrussia 22.02.2011 17:30

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

Prometei1599 24.02.2011 15:05

Вложений: 1
Добрый день!
В вспомогательном 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

Вот упрощенный код:
Код AS1/AS2:

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

Почти так. Немного уточню, может что-то упустил:
Код AS1/AS2:

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

Добрый день!
Вопрос решен и тему можно закрывать!)
Если кому интересно, вот код:
Код AS1/AS2:

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!)


Часовой пояс GMT +4, время: 13:49.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.