Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   linkage + циклы (http://www.flasher.ru/forum/showthread.php?t=128940)

FlashRabbit 21.08.2009 15:41

Код AS3:

for(var i:int = 1; i < 61; i++)
{
        var obj:DisplayObject = bigmap.getChildByName("BTN"+i) as DisplayObject;
        obj.addEventListener(MouseEvent.CLICK, clickHandler);
}


zzz_dmg 21.08.2009 16:24

а как быть в такой ситуации. достою первый клип, задаю ему твин и энтерфрейм. как только клип по х превысит свою ширину, за ним достается следующий и т.д. а по MOTION_FINISH я пытаюсь этот клип удалить. но почему-то удаляется только первый, последующие на это не реагируют. почему клипы не реагируют, они все же привязаны к этому твину, может надо каждому свой твин задать?
Код AS3:

var img:Array = [];
function img_mod(){
var c:Class = getDefinitionByName(mov_name[i]) as Class;
var mov:MovieClip = new c() as MovieClip;
this.addChild(mov);
img[i] = mov;
img[i].x = -50;
img[i].y = 115;
var myTween:Tween = new Tween(img[i], "x", Elastic.easeOut, -50, 500,20, true);
myTween.addEventListener(TweenEvent.MOTION_FINISH, motion);
img[i].addEventListener(Event.ENTER_FRAME, enter_frame);
if (i == total-1){
        i = 0;
}
}
function motion (event:TweenEvent):void {
        removeChild(img[i]);
}
function enter_frame (event:Event):void {
        if (img[i].x > img[i].width+5){
                img[i].removeEventListener(Event.ENTER_FRAME, motion);
                i++;
                img_mod();
        }
}


igrayka 21.08.2009 16:38

получилось вот так . По другому вообще не работает пишет - TypeError: Error #1009: Cannot access a property or method of a null object reference.
at AS::Control()
Код AS3:

var BTNlistener:*;
for(i=1;i<bigmap.numChildren;i++)
{
        BTNlistener = bigmap.getChildAt(i);
        BTNlistener.addEventListener(MouseEvent.ROLL_OVER, BTNrollOverHandler);
        BTNlistener.addEventListener(MouseEvent.ROLL_OUT, BTNrollOutHandler)
                        }

вычитал вот тут http://siliren.ru/content/view/95/1/

Добавлено через 13 минут
а теперь вопрос )

как заставить в зависимости от того какая кнопка была нажата, определенные клипы менять свой тайм лайн ?

тоесть : у нас есть кнопка BTN34 и есть клип CLIP34 , если на кнопку навели мышку то клипчик выполняет gotoAndPlay(10) . мышку убрали gotoandStop(1) . Стандартная фичка

Добавлено через 10 часов 7 минут
решил эту штуку вот так

Код AS3:

protected function BTNrollOutHandler(event:MouseEvent):void {
                        //bigmap.shape_34.gotoAndPlay("stop");
                        stopShape(event.currentTarget);
                }
                function stopShape(BTNClip:*):void {
                        var index = bigmap.BTNContainer.getChildIndex(BTNClip);
                        bigmap.ShapeContainer["shape"+index].gotoAndPlay("stop");
                }


но пришлось создать 2 контэйнера ... и в них хранить только кнопки и клипы, строго хронологически их добавлять и называть, иначе ничего не работает ...

вот бы знать как имя клипа кнопки ( INSTANCE NAME ) считывать когда он событие передает !

cauchy 23.08.2009 19:39

Цитата:

Сообщение от BlooDHounD (Сообщение 844297)
Dante, ну тогда уже так:
Код AS3:

var c:Class = getDefinitionByName( "s" + i ) as Class;
var s:Sprite = new c() as Sprite;
this.addChildAt( s );


Что-то никак не врублюсь. Этот код создаёт переменную с именем "s" и типом "s1" (для i=1)? Или что он делает?
А хотелось бы узнать тогда, как создать переменную с именем ["s"+i] и типом sprite.

А код из цитаты я так и не смог заставить работать %)

BlooDHounD 23.08.2009 21:09

cauchy, Вы что пытались этим кодом сделать? этот код добавляет мувик из библиотеки ( "s1", где i=1 )

cauchy 23.08.2009 21:41

BlooDHounD, если честно я сам запутался что я пытался сделать :wacko: С getDefinitionByName я разобрался, это не то, что мне было нужно.
Лучше я здесь задам корректный вопрос, из за которого собственно я и забрёл в эту тему:
Мне необходимо программно создать, например, 100 объектов (пусть они являются экземплярами покласса Sprite), и затем их разместить на экране, добавить к ним слушателей и ещё как-либо ими управлять. Для этого необходимо использовать массив, в который и добавляются все эти объекты? Причём имён эти объекты иметь не будут, а получить доступ к ним можно только как к элементу массива по индексу?
Я правильно подхожу к решению данной задачи? Или есть способ лучше?

Надеюсь ничего страшного, что я решил это в данной теме спросить :)

FlashRabbit 23.08.2009 22:10

Будет быстрее если спрайты накидать в контейнер, а потом брать их от туда с помощью getChildAt().

BlooDHounD 23.08.2009 22:46

правильно подходите. закидывайте в массив и обращайтесь по индексу.

cauchy 24.08.2009 00:59

Спасибо за ответы, решил пока остановиться на массиве.


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

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