Форум 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)
-   -   Классы и LoadMovieClip (http://www.flasher.ru/forum/showthread.php?t=120779)

the_scratch 30.01.2009 15:03

Цитата:

Собственно, Вопрос. Мувики внутри библиотеки у меня ассоциированы с классом. А как их ассоциировать с классом при хранении снаружи SWF? Код класса где должен быть? Помогите. пожалуйста, разобраться.
А с тем, что память не чистится, ничего не сделать. Пока мувики не отгружены через removeMovieClip, память (занятую плеером под какие-то нужды для каждой картинки отдельно) так и будет занятой. Причём, насколько я понял из чтения интернетов, это касается и всё того же system.gc() из AS3.

Я повторю. Не факт, но есть надежда, что removeMovieClip (unloadMovie) освободит память, занятую картинками. Но возникает проблема: подгружаемый снаружи мувик должен быть чётко связан с определённым классом. Как это сделать, я не понимаю.

iNils 30.01.2009 15:20

Цитата:

Мувики показываются, память какое-то время отъедается, отъедается, потом, когда уже все картинки показаны хотя бы раз
...
Как я сейчас вижу решение? Хочу попробовать мувики-мультики хранить не в библиотеке внутри swf, а в виде отдельных файлов swf, и подгружать их через loadMovie, а не attachMovie, как сейчас
Вы сначала связку attachMovie - removeMovieClip попробуйте.

the_scratch 30.01.2009 15:51

Связка attachMovie - removeMovieClip не работает.
Память не отдаётся.

Вообще-то, я это ещё утром пробовал.
По-моему, всё дело в том, что мувик по-прежнему в памяти - конкретно "в библиотеке".
Нужны отгружаемые/подгружаемые, внешние swf.

Вопрос, заданный в первом посте - как увязать подгружаемый мувик с конкретным классом?
Это во флеше вообще реально сделать? Без привязки к моей задаче? Можно или нет?

dimarik 30.01.2009 18:25

Можно. Определите классы в главном мувике. Для этого заставьте компилятор вкомпилить эти классы путем указания в первом (или нужном) кадре
Код AS1/AS2:

import AClass;
AClass;

При желани проверьте декомпилятором.

the_scratch 02.02.2009 15:42

Я извиняюсь, а дальше?

Главный мувик будет знать про мой класс. Но если я делаю loadMovie, то подгруженный мувик не имеет никакого класса, он просто мувик, и всё. Просто мувик. Класса MovieClip. Как сделать, чтобы он был (стал) моим классом?

loadMovie(url:String,target:Object [, method:String]) : Void

target Ссылка на мувиклип или строковое представление пути к мувиклипу, в который будет производиться загрузка. Содержимое мувиклипа, в который происходит загрузка, будет замещено загруженным SWF файлом или изображением.


Если я сделаю так:
Код AS1/AS2:

var mc : MyClass = new MyClass();
loadMovie("file:///...", mc);

то mc, насколько я понял из описания, вообще забудет всё и вся.
Даже то, что он класса MyClass, -- и то забудет.
Или нет?

dimarik 02.02.2009 18:26

что-то типа этого:
Код AS1/AS2:

// File main.swf
import AClass;
 
var aClassInstance:AClass;
 
var mcl:MovieClipLoader = new MovieClipLoader();
this.mcl.addListener(this);
this.mcl.loadClip('external.swf');
 
this.onLoadInit = function(target:MovieClip) {
        this.mcl.removeListener(this);
        delete this.mcl;
        this.aClassInstance = AClass.assign(target);
        trace( this.aClassInstance.isAlive() );
}
 
 
//-----------------------------
// File AClass.as
//-----------------------------
 
class AClass {
 
        public static function assign(mc:MovieClip):AClass {
                if (!mc) return null;
                var c:Function = AClass;
                mc.__proto__ = c.prototype;
                c.call(mc);
                return AClass(mc);
        }
 
        /**
        *        Constructor.
        */

        private function AClass() {
                super();
                trace("AClass constructor");
        }
 
        public function isAlive():String {
                return 'Yheee, I am real alive!';
        }
}

Что-то такое есть у silin'a.

the_scratch 04.02.2009 13:30

dimarik, спасибо. Я понял, опробовал, вроде работает.
Пока ещё не переписывал код, но кажется, всё получится и с размерами победим.


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

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