Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Обращение к клипам (http://www.flasher.ru/forum/showthread.php?t=149882)

Pendulum 02.02.2011 14:57

Обращение к клипам
 
Ситуация такая: на поле выложены несколько клипов с именами f1, f2, f3,....
На каждом клипе в первом кадре стоит stop();
Хочу запустить их в случайном порядке

Код AS3:

var timer:Timer=new Timer(100);
 
timer.addEventListener(TimerEvent.TIMER, timerf);
timer.start();
 
function timerf(e:TimerEvent):void{
        var j=int(Math.random()*31);
        Object("f"+j).play();
        }

Как правильно в ним обратиться для запуска???

arkadattx 02.02.2011 15:02

Занести в массив и оттуда дергать по случайному индексу, исходя из длины массива.

ChuwY 02.02.2011 15:15

Код AS3:

const NUM_CLIPS: int = 31;
const DEF_CLIP_NAME : String = "f";
var timer                  : Timer=new Timer(100);
 
timer.addEventListener(TimerEvent.TIMER, timerf);
timer.start();
 
function timerf(e:TimerEvent) : void{
  var clipNumber = int(Math.random()*NUM_CLIPS);
  var clipName  = DEF_CLIP_NAME  +  clipNumber;
  var clip : MovieClip = getChildByName(clipName) as MovieClip; 
  clip.play();
}


КорДум 02.02.2011 15:16

Ну или
Код AS3:

(getChildByName("f" + j) as MovieClip).play();

Добавлено через 31 секунду
Опередили немножко.

Pendulum 02.02.2011 15:18

как лучше занести клипы в массив.
я же не буду писать
Код AS3:

arr[1]=f1;
ar[2]=f2;
arr[3]=f3;

у меня их 31 штука???

КорДум 02.02.2011 15:19

Код AS3:

for (var i:int = 0; i < 31; i++) arr[i] = getChildByName("f" + (i+1));


Pendulum 02.02.2011 15:20

КорДум, спасибо, все работает!!!

ChuwY 02.02.2011 15:24

На этот раз опередили меня :)
Но я бы занес в вектор, чтобы можно было сразу из него делать старт, а не приводить каждый раз.
То есть как-то так.

Код AS3:

const NUM_CLIPS: int = 31;
const DEF_CLIP_NAME : String = "f";
var timer                  : Timer=new Timer(100);
var clips                    : Vector.<MovieClip> = new Vector.<MovieClip>();
 
for(var i : int = 0; i < NUM_CLIPS; i++){
  var clipName  = DEF_CLIP_NAME  +  i;
  var clip : MovieClip = getChildByName(clipName) as MovieClip;
  if(clip){
    clips.push(clip);
  }
}
 
 
timer.addEventListener(TimerEvent.TIMER, timerf);
timer.start();
 
 
 
function timerf(e:TimerEvent) : void{
  var clipNumber = int(Math.random()*clips.length);
  var clip : MovieClip = clips[clipNumber];
  clip.play();
}

И быстрее должно быть на несколько микрон.
Наверное, я слишком не люблю аррей в роли индексированного массива и слишком люблю вектор.

КорДум 02.02.2011 15:28

ChuwY ;)
По-хорошему, их надо в вектор помещать, конечно.
Код AS3:

private var vector:Vector.<MovieClip> = new Vector.<MovieClip>();
...
for (var i:int = 0; i < 31; i++)
    vector.push(getChildByName("f" + (i + 1)) as MovieClip);


ChuwY 02.02.2011 15:31

У меня дежа вю =D


Код AS3:

arr[i] = vector.push(...)

Замысловатая конструкция.

Я понял. Это чтобы потом обращаться вот так: *jokingly*

Код AS3:

var number : int = int(Math.random()*31);
var clip : MovieClip = vector[arr[number]-1]


КорДум 02.02.2011 15:31

ChuwY, опять опередили меня! :D

Добавлено через 5 минут
ОЙ! Не заметил и не убрал. Поправил.

Добавлено через 6 минут
Цитата:

Я понял. Это чтобы потом обращаться вот так:
Нет, это чтобы обращаться когда как - по настроению ;)

arkadattx 02.02.2011 15:49

А почему не заносить в массив при создании? Зачем все эти гетЧайлдБай...? Если условия позволяют - было бы проще.

КорДум 02.02.2011 15:51

Цитата:

Если условия позволяют - было бы проще.
Ключевой момент. А если дизайнер передал swc с одним клипом, в котором 100 звезд и они должны быть интерактивными и располагаться на тех же местах? Переносить все координаты на бумажку и добавлять программно? Убийство.

ChuwY 02.02.2011 15:54

Код AS3:

Нет, это чтобы обращаться когда как - по настроению

Ну я делал класс, в котором был словарь, в котором ключами были строки, а значениями -- индексы объектов в векторе. В итоге и пробегать быстро и дергать просто. Не знаю, насколько это оптимально, но мне тогда было удобно :)

arkadattx, потому что так были поставлены условия.

Скорее всего автор положил эти мувики на сцену или в другой клип. Не всегда же всю графику кодом выставляют на места.

КорДум, Т_Т

КорДум 02.02.2011 16:48

Цитата:

В итоге и пробегать быстро и дергать просто.
От задачи подход зависит, конечно же.

ChuwY, счет 3 : 3 :D

elecstorm 04.02.2011 14:21

скажите, а как обращаться к клипу из него самого? Хочу прозрачность менять. Просто обращение по названию не получается, еще пробовал обратиться так:
Код:

_root.text1.alpha = 0;
тоже не работает


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

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