Форум 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)
-   -   опять про подгрузку мувика (http://www.flasher.ru/forum/showthread.php?t=88159)

O'Fox 18.11.2006 01:28

опять про подгрузку мувика
 
привет... у меня непонятный трабл..
есть две флэшки(first.swf и second.swf), в одной
есть мувик... в нем шагает человечек...
этот клип множится посредством следующего кода:
Код:

this.onLoad = function() {
                for (i=0; i<3; i++) {
                duplicateMovieClip("mc1", "mc1"+i, i);
        }
};

проверяем: - все работает. шагают 4 человечика.

теперь во второй флешке (second.swf) создаю пустой мувик и подгружаю в него первую флэшку:
Код:

this.mc2.loadMovie("first.swf");
проверяем, работает...но.... человечек остался только один...
то есть дубликаты клипа гдето потерялись.....
по идеи подгружаться должно ВСЁ содержимое first.swf.....
однако этого не происходит...
ссылки менял и на относительные и на асолютные... не помогло...

в Чем дело и как исправить?

Спасибо за внимание!

pkfun 18.11.2006 02:59

Вложений: 1
Вложение 15799
Вроде все нормально грузится.

К чему onLoad относится то?

O'Fox 18.11.2006 13:51

Вложений: 1
исходники

O'Fox 18.11.2006 16:38

Вложений: 1
Вроде разобрался...
оказывается при подрузке в мувик из другой флешки прередается ее содержимое, а не оболочка... на эту мысл меня навело то обстоятельство, что при подгрузке цвет фона остается без изменения, скрипт "размножения" был у меня в корне... как бы в оболочке флешки, после того как я создал еще один мувик и все скрипты с мувиками засадил в него, все стало работать как надо...


спасибо за помощь

pkfun 18.11.2006 17:39

Вложений: 2
Вложение 15804

:D

O'Fox 19.11.2006 22:55

прикольно... но чет больно сложно...буду разбираться

pkfun 20.11.2006 01:19

Код:

var mn:MovieClip = this;
var inter:Number = 0;
var i:Number = 0;
//
function createNew():Void {
        mc = mn.attachMovie('mc_main', 'mc_main'+i, mn.getNextHighestDepth(), {_y:rand(90, 110), _alpha:rand(30, 100), _rotation:rand(-50, 50)});
        mc._xscale = mc._yscale=rand(20, 150);
        trace(mc._width);
        trace(mc._x=Math.round((355/2)-(mc._width/2)));
}
//
function timeCr():Void {
        i == 10 ? i=0 : i++;
        createNew();
        mc.onEnterFrame = function():Void  {
                if (this._currentframe == this._totalframes) {
                        delete this.onEnterFrame;
                        this.removeMovieClip();
                }
        };
}
//
function rand(a:Number, b:Number):Number {
        return Math.round((b-a)*Math.random()+a);
}
//
inter = setInterval(timeCr, 1000);

1. Определяем переменные.
Код:

var mn:MovieClip = this;
var inter:Number = 0;
var i:Number = 0;

2. Функция которая генерирует случайное число от a до b. Числа a и b передаются в функцию извне как аргументы.
Код:

function rand(a:Number, b:Number):Number {
        return Math.round((b-a)*Math.random()+a);
}

3. Функция которая аттачит на сцену мувик с бегущим человечком. Ссылка на новый мувик сохраняется в переменной mc. При вставке мувика, параметры _x, _y, _xscale, _yscale, _alpha, _rotation определяются случайным числом которое выдает функция rand(a,b)(мы определили эту функцию ранее).
mc._xscale=mc._yscale чтобы сохранять пропорции человечка( можно и не сохранять).
trace(mc._x=Math.round((355/2)-(mc._width/2))) - это я так, немного неуклюже определил точку вставки мувика, чтобы он вставлялся примерно в средине экрана, в зависимости от масштаба. :) 355 вероятно можно заменить на stage._width...
Код:

function createNew():Void {
        mc = mn.attachMovie('mc_main', 'mc_main'+i, mn.getNextHighestDepth(), {_y:rand(90, 110), _alpha:rand(30, 100), _rotation:rand(-50, 50)});
        mc._xscale = mc._yscale=rand(20, 150);
        trace(mc._width);
        trace(mc._x=Math.round((355/2)-(mc._width/2)));
}

4. Эта функция выполняет несколько задач:
- считает i(что в принципе и не нужно, но я как-то привык. Даже если бы мы вставляли все мувики с одним и тем же именем, flash все равно создает новые мувики, только обзывает их instance n)
- запускает функцию создания нового мувика
- удаляет отработавшие мувики. Отработавший, в данном случае, это мувик который дошел до своего последнего кадра. Как происходит удаление: для каждого нового мувика запускается событие onEnterFrame, с этим событием связана функция, которая отслеживает текущий кадр конкретного мувика. Если этот кадр равен последнему кадру, то данный мувик удаляется. Получается, что мы запускаем одновременно некоторое количество этих функций. Я проверял, производительность просаживается совсем незначительно.
Код:

function timeCr():Void {
        i == 10 ? i=0 : i++;
        createNew();
        mc.onEnterFrame = function():Void  {
                if (this._currentframe == this._totalframes) {
                        delete this.onEnterFrame;
                        this.removeMovieClip();
                }
        };
}

5. И, наконец, код который все запускает. 1000 это интервал с которым будут создаваться новые мувики. Чем меньше это число, тем больше будет человечков в кадре и больше одновременных onEnterFrame.
Код:

inter = setInterval(timeCr, 1000);

pkfun 20.11.2006 09:42

Код:

/*mc.onEnterFrame = function():Void  {
        if (this._currentframe == this._totalframes) {
        this.removeMovieClip();
        delete this.onEnterFrame;
        }
        };*/

Впрочем этот кусок кода можно вобще выбросить. Вместо него надо просто в последнем кадре мувика в библиотеке(mc_main) написать следующий код:
Код:

this.removeMovieClip()
Тогда, любой экземпляр, когда дойдет до последнего кадра, самоуничтожается.

По производительности оба варианта идентичны. :)

O'Fox 20.11.2006 12:31

Вложений: 1
это круто. Спасибо!
arachnofobia.rar


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

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