Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   Опять синтаксис.Функция в цикле. (http://www.flasher.ru/forum/showthread.php?t=52907)

Штрек 20.12.2003 05:03

Опять синтаксис.Функция в цикле.
 
Хочу замутить такую штуку -
Есть произвольный мувик прямоугольной формы - накрываю его
дубликатами нарисованного прогр.прямогольника
по nw штук в ширину и по nh штук в длину/т.е. как бы клетками/.
Затем надо организовать разлёт этих мувиков.
Для разлёта пишу функцию

function raslyt1(targ) {
xrand = random(20)-10;
yrand = random(20)-10;
this.onEnterFrame = function() {
targ._xscale += 5;
targ._yscale += 5;
targ._alpha -= 5;
targ._x += xrand;
targ._y += yrand;
if (targ._alpha<=0) {
targ.removeMovieClip();
delete this.onEnterFrame;
}
};
}

Для заполнения пишу функцию, в которую заразом вставляю функцию разлёта

function zapolnemie(name, nW, nH, col) {
nameDepth = name.getDepth();
nameHeight = name._height;
nameWidth = name._width;
nameX = name._x;
nameY = name._y;
nnn = nW*nH;
this.createEmptyMovieClip("mmcc", nameDepth+1);
with (mmcc) {
beginFill(col, 100);
moveTo(0, 0);
lineTo(nameWidth/nW, 0);
lineTo(nameWidth/nW, nameHeight/nH);
lineTo(0, nameHeight/nH);
lineTo(0, 0);
_visible = 0;
}
for (i=1; i<=nW; i++) {
for (j=0; j<nH; j++) {
mmcc.duplicateMovieClip("mmcc"+i+nW*j, nameDepth+1+i+nW*j);
this["mmcc"+i+nW*j]._x = nameX-nameWidth/2+(i-1)*nameWidth/nW;
this["mmcc"+i+nW*j]._y = nameY-nameHeight/2+j*nameHeight/nH;
this.raslyt1(this["mmcc"+i+nW*j]);//Вот здесь подлянка
}
}
}

Тестю
zapolnemie(mc, 4, 4, 0xff0000);
Разлетается только последний/16й/ мувик, остальные на месте.
Знаю, что так по простому функцию в цикл не засунуть,
а вот как - в голову не прёт.
Подставьте плечо, плиз. ;)

sts 20.12.2003 08:54

онентефрейм у тебя для всего свф, не для каждого квадратика

квик фикс

function zapolnemie(name, nW, nH, col) {
nameDepth = name.getDepth();
nameHeight = name._height;
nameWidth = name._width;
nameX = name._x;
nameY = name._y;
nnn = nW*nH;
this.createEmptyMovieClip("mmcc", nameDepth+1);
with (mmcc) {
beginFill(col, 100);
moveTo(0, 0);
lineTo(nameWidth/nW, 0);
lineTo(nameWidth/nW, nameHeight/nH);
lineTo(0, nameHeight/nH);
lineTo(0, 0);
_visible = 0;
}
for (i=1; i<=nW; i++) {
for (j=0; j<nH; j++) {
mmcc.duplicateMovieClip("mmcc"+i+nW*j, nameDepth+1+i+nW*j);
this["mmcc"+i+nW*j]._x = nameX-nameWidth/2+(i-1)*nameWidth/nW;
this["mmcc"+i+nW*j]._y = nameY-nameHeight/2+j*nameHeight/nH;
var c = this["mmcc"+i+nW*j];
xrand = random(20)-10;
yrand = random(20)-10;
c.onEnterFrame = function() {
this._xscale += 5;
this._yscale += 5;
this._alpha -= 5;
this._x += xrand;
this._y += yrand;
if (this._alpha<=0) {
this.removeMovieClip();// почему крутится после removeMovieClip если убрать delete?
delete this.onEnterFrame;
}
};
}
}
}

zapolnemie(mc, 4, 4, 0xff0000);


ЗЫ: а у меня флаш год назад отобрали злые якобы нилсены, во жизнь :eek:

Штрек 20.12.2003 13:30

Большое конечно спасибо,
Однако фишка была вы том, что бы написать ф.raslyt1(targ) отдельно, а может и несколько функций разлёта/разных/ и по мере необходимости вставлять в ф.zapolnemie(name, nW, nH,
col)
Как бы вот это выкрутить?
ЗЫ.При твоём варианте квадраты разлетаются синхронно,
а надо чтоб
xrand = random(20)-10;
yrand = random(20)-10;
были для каждого свои. :p Но это конечно решаемо.
Вопрос всё таки в том, что бы вставлять ф-цию в цикл -
мож саму ф.raslyt1(targ) переписать.
Я вообще сова, утром туго соображаю, мож к вечеру сам разберусь.
ЗЫ.Кто Флэш отбирает, того фэйсом об тэйбл. :D

Пушистик 20.12.2003 14:47

вставляю ваше коды и пусто.....:)
чё должно появится?:)
дайте рабочий пример:)

Штрек 20.12.2003 15:14

Сделай мувик/прямоугольный/, обзови его mc
и вставляй в кадр с мувиком код.
Поверх мувика должно появится 16 прямоугольн. /красн./
и они должны разлетаться в разные стороны.

sergwizard 20.12.2003 15:38

Вложений: 1
Почему ты никогда не используешь прототипы? С ними же легче прописывать свои свойства и методы для каждого экземпляра мувика.
Вот тебе маленький намек.

2sts Как это у тебя отобрали Flash?

sergwizard 20.12.2003 15:52

Влт так примерно:
Код:

MovieClip.prototype.acts = function(){
        this.onMouseDown = function(){
this.xrand = random(20)-10;
this.yrand = random(20)-10;
this.onEnterFrame = function() {
this._xscale += 5;
this._yscale += 5;
this._alpha -= 5;
this._x += this.xrand;
this._y += this.yrand;
if (this._alpha<=0) {
this.removeMovieClip();// ïî÷åìó êðóòèòñÿ ïîñëå removeMovieClip åñëè óáðàòü delete?
delete this.onEnterFrame;
}
}
};
}
function zapolnemie(name, nW, nH, col) {
nameDepth = name.getDepth();
nameHeight = name._height;
nameWidth = name._width;
nameX = name._x;
nameY = name._y;
nnn = nW*nH;
this.createEmptyMovieClip("mmcc", nameDepth+1);
with (mmcc) {
beginFill(col, 100);
moveTo(0, 0);
lineTo(nameWidth/nW, 0);
lineTo(nameWidth/nW, nameHeight/nH);
lineTo(0, nameHeight/nH);
lineTo(0, 0);
_visible = 0;
}
for (i=1; i<=nW; i++) {
for (j=0; j<nH; j++) {
mmcc.duplicateMovieClip("mmcc"+i+nW*j, nameDepth+1+i+nW*j);
this["mmcc"+i+nW*j]._x = nameX-nameWidth/2+(i-1)*nameWidth/nW;
this["mmcc"+i+nW*j]._y = nameY-nameHeight/2+j*nameHeight/nH;
this["mmcc"+i+nW*j].acts();
}
}
}

zapolnemie(mc, 4, 4, 0xff0000);


nuran 20.12.2003 15:52

Чё то или я туплю или чего, но мне кажется так:
Берешь, делаешь сколько тебе надо различных функций разлёта:

function bomb1(){}
function bomb2(){}
.....
и т. д.

Далее как хочешь, присваиваешь каждому муву по такой функцие. Параметры разлёта к примеру в функцие рандомные пусть будут, и тогда все квадраты по разному летать будут. Ну а как присвоить - легко:

eval("my-Movie-Clip"+i).onEntrFrame = bomb1;
или для смены соответственно другую всем присваиваешь.

Наверное я опять что-то протупил.

Штрек 20.12.2003 16:35

Цитата:

Оригинал написал(а) sergwizard
Почему ты никогда не используешь прототипы? С ними же легче прописывать свои свойства и методы для каждого экземпляра мувика.

Нормальные герои всегда идут в обход :D

sergwizard 20.12.2003 17:43

Тогда получай. :)
Код:

mCol = new Array();
mCol[0] = 0xFF0000;
mCol[1] = 0x00FF00;
mCol[2] = 0x0000FF;
mCol[3] = 0xFFFF00;
mCol[4] = 0xFF00FF;
mCol[5] = 0x00FFFF;
mCol[6] = 0x000000;
MovieClip.prototype.acts = function(){
        this.onMouseUp = function(){
                this.xrand = random(20)-10;
                this.yrand = random(20)-10;
                        this.onEnterFrame = function() {
                                this._xscale += 5;
                                this._yscale += 5;
                                this._x += this.xrand;
                                this._y += this.yrand;
                                this._alpha -= 5;
                                if (this._alpha<=0) {
                                                this.removeMovieClip();
                        }
                }
        }
}
function zapolnemie(name, nW, nH, col) {
nameDepth = name.getDepth();
nameHeight = name._height;
nameWidth = name._width;
nameX = name._x;
nameY = name._y;
nnn = nW*nH;
for (i=1; i<=nW; i++) {
        for (j=0; j<nH; j++) {
        this.createEmptyMovieClip("mmcc"+i+nW*j, nameDepth+1+i+nW*j);
                with (_root["mmcc"+i+nW*j]) {
                        beginFill(col, 100);
                        moveTo(0, 0);
                        lineTo(nameWidth/nW, 0);
                        lineTo(nameWidth/nW, nameHeight/nH);
                        lineTo(0, nameHeight/nH);
                        lineTo(0, 0);
                this["mmcc"+i+nW*j]._x = nameX-nameWidth/2+(i-1)*nameWidth/nW;
                this["mmcc"+i+nW*j]._y = nameY-nameHeight/2+j*nameHeight/nH;
                this["mmcc"+i+nW*j].acts();
                        }
                }
        }
}
zapolnemie(mc, 4, 4, 0xff0000);
this.onMouseDown = function(){
        _root.mc._alpha -= 5;
        if(n<=6){n++;}
zapolnemie(mc, 4+n, 4+n, mCol[random(7)]);
if(_root.mc._alpha<=0){
        delete zapolnemie;
}
}



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

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