Форум 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=111682)

FDS 05.05.2008 15:03

Массив муви-клипов созданных не программно
 
У меня такой вопрос:
предыстория: Я создал много муви клипов(более 200) с именами типа "...,k28_mc,..., k87_mc...". На каждый клип мне надо сделать действие, фактически одинаковое.
Вопрос: Как мне обойти все клипы циклом? А не прописывать каждому клипу действие отдельно. Грубо говоря, можно ли все эти клипы запихнуть в массив?

(с) все орфографические и пунктоционные ошибки в посте пренадлежат мне, и исправлению не подлежат.

Волгоградец 05.05.2008 15:50

Код:

var arr:Array = new Array ();//создаю новый массив
arr.push (k28_mc);//в массив добавляю клипы
arr.push (k87_mc);


onEnterFrame = function ():Void{
  //перебираю массив и для каждого клипа меняю координату х
  for (var i:String in arr){
          arr[i]._x += 5;
  }
}


olexandr 05.05.2008 15:58

если названия однотипные, можно и без массива

Код:

for (var i:Number=0; i<count; i++){
  trace('k'+i+'_mc')
}


Vertax 05.05.2008 15:58

Такими темпами 200++ строк он будет только массив создавать. Проще тогда уж так:
Код:

var arr:Array = new Array ();//создаю новый массив
for (var i = 1; i < 200; i++) arr.push(eval("k" + i + "_mc"));


Wolsh 05.05.2008 16:06

если нужен массив
Код:

var arr:Array = new Array ();//создаю новый массив
for(var i=0; i<201; i++){
    var mc = _root["k"+i+"_mc"];
    mc != undefined ? arr.push(mc) : null;
  }
trace(arr.length())

если массив не нужен, просто меняем свойства или функции
Код:

for(var i=0; i<201; i++){
    _root["k"+i+"_mc"]._x = 220;
}


Волгоградец 05.05.2008 16:09

eval - устаревшая функция. В AS 3.0 ее нет. Нужно так:
Код:

for (var i = 1; i < 200; i++) arr.push(this["k" + i + "_mc"]);
Но если имена однотипные, нужно делать, как сказал olexandr или Wolsh.

FDS 05.05.2008 16:25

Всем огромное спасибо. Все получилось.

FDS 05.05.2008 16:50

Ну... почти все. Еще один вопрос по этому же проекту:
обращаться и изменять клипы с однотипными именами это понятно, проблемма теперь состоит вот в чем:
В начале я задал всем этим роликам невидимость:
Код:

for(var i=0; i<218; i++){
    _root.l0.kv_mc["k"+i+"_mc"]._alpha = 0;
}

//kv_mc это ролик в котором содержатся куча остальных роликов
теперь мне надо, что бы при наведении на один из кучи "квадратов" он становился видимым. Я логически думаю так: при наведении на ролик, в котором есть все остальные ролики, он начинает цикл проверки на какой ролик наведино и делает его видимым(в коде у меня 100% дурость наверно, потому что не работает :) ):
Код:

_root.l0.kv_mc.onRollOver=function(){
for(var i=0; i<218; i++){
    _root.l0.kv_mc["k"+i+"_mc"].onRollOver = function(){
                l0.kv_mc["k"+i+"_mc"]._alpha = 100;}
        _root.l0.kv_mc["k"+i+"_mc"].onRollOut = function(){
                l0.kv_mc["k"+i+"_mc"]._alpha = 0;}               
}}


Obi 05.05.2008 16:58

Код:

for(var i=0; i<218; i++){
    var myMc:MovieClip = _root.l0.kv_mc["k"+i+"_mc"];
    myMc._alpha = 0;
    myMc.onRollOver = function():Void {
          this._alpha = 100;
    }
    myMc.onRollOut = funtion():Void {
          this._alpha = 0;
    }
}


Vertax 05.05.2008 17:00

2Obi: Не выйдет при _visible=false события мыши не сработают. Нужно: _alpha = 0, _alpha = 100 соответственно.


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

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