Просмотр полной версии : Массив муви-клипов созданных не программно
У меня такой вопрос:
предыстория: Я создал много муви клипов(более 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')
}
Такими темпами 200++ строк он будет только массив создавать. Проще тогда уж так:
var arr:Array = new Array ();//создаю новый массив
for (var i = 1; i < 200; i++) arr.push(eval("k" + i + "_mc"));
если нужен массив
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.
Всем огромное спасибо. Все получилось.
Ну... почти все. Еще один вопрос по этому же проекту:
обращаться и изменять клипы с однотипными именами это понятно, проблемма теперь состоит вот в чем:
В начале я задал всем этим роликам невидимость:
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;}
}}
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;
}
}
2Obi: Не выйдет при _visible=false события мыши не сработают. Нужно: _alpha = 0, _alpha = 100 соответственно.
4 Vertax
а вот и дурость моя где :) . Ваш код как таковой не работает, но подсказка огромнейшая, так что я все исправил, Спасибо.
2Obi: Не выйдет при _visible=false события мыши не сработают. Нужно: _alpha = 0, _alpha = 100 соответственно.
Поправил давно уж.
Подскажите плиз, почему при таком коде
onEnterFrame = function ():Void{
for(var i=0; i<218; i++){
_root.l0.kv_mc["k"+i+"_mc"].onRollOver = function(){
this._alpha = 100;
_root.s_mc._x = i;
}}}
в _root.s_mc._x кидается последнее число(а именно 218). И как это можно поправить, надо что бы запомнилось то i при котором _alpha у клипа 100%
Должно помочь
onEnterFrame = function ()
{
for(var i=0; i<218; i++)
{
_root.l0.kv_mc["k"+i+"_mc"].id = i;
_root.l0.kv_mc["k"+i+"_mc"].onRollOver = function()
{
this._alpha = 100;
_root.s_mc._x = this.id;
}
}
}
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.