Форум 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]



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

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