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

xomka 15.01.2008 19:21

Множество объектов и события
 
Раздела для начинающих не нашел, так что осмелюсь спросить тут:)

Есть мовики (model1, model2, model3 ....), идущие в ряд, я создал массив с данными мувиками
Код:

var models:Array = new Array();
models[0] = model1;
models[1] = model2;
models[2] = model3;
models[3] = model4;

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

Я попытался сделать так:
Код:

for each (var obj in models)
{
  obj.addEventListener(MouseEvent.CLICK, function handler(event:MouseEvent):void { moveModel(obj);});
}

Но при вызове функции moveModel в obj содержится model4 в данном случае...

Подскажите пожалуйста..!!

wvxvw 15.01.2008 20:24

Код:

var models:Array = new Array();
models[0] = new Mod();
models[1] = new Mod();
models[2] = new Mod();
models[3] = new Mod();
var i:uint = 0;
var j:uint = 0;
for each (var obj:Mod in models)
{
        obj.buttonMode = true;
        obj.x = i;
        i += obj.width + 5;
        obj.__id = ++j;
        addChild(obj);
  obj.addEventListener(MouseEvent.CLICK, moveModel);
}
function moveModel(event:Event):void {
        trace(event.target.toString());
        trace(event.target.x);
        trace(event.target.__id);
}

По идее должно хватить =)

2morrowMan 15.01.2008 23:04

Если тебе нравится так писать, то зделай так:
Код:

for each (var obj in models)
{
  obj.addEventListener(MouseEvent.CLICK, function handler(event:MouseEvent):void { moveModel(event.target);});
}


xomka 30.01.2008 02:28

Сделал следующим образом, прошу оценить верно ли решение и насколько оно коряво.

В этом мувике добавил еще один кадр, и:

Код:

var models:Array = new Array();
models[0] = model1;
models[1] = model2;
models[2] = model3;

var output:uint;
var i:uint = 0;
var j:uint = 0;

if(output!=1){#Это чтобы при каждом входе во фрейм объекты заново   
                  #не  выстраивались

        for each (var obj in models) {
        obj.x = i;
        obj.st_x = i;
        i += obj.width + 5;
        obj.__id = ++j;
        obj.addEventListener(MouseEvent.CLICK, moveModel);
}
output=1;
}

function moveModel(event:Event):void {
        for each (var obj in models) {
                if (obj.__id > event.target.__id) {
                        obj.moveObjRight = 1; # всем мувикам которые правее я назначаю свойство, чтобы двигать их.

                        }
        }
}


for each (var obj2 in models) { # теперь при каждом входе во фрейм я проверяю у каких объектов свойство moveObjRight=1 и двигаю их...    И вообще такую конструкцию я замутил, чтобы двигать объекты постепенно, а не просто поменять координаты, то есть для анимации
        if(obj2.moveObjRight==1){
                obj2.x+=1;
                }
        if(obj2.st_x < obj2.x - 10 ){ # Как только они отодвинулись на нужное расстояние приравниваю свойство moveObjRight=0 и они соответственно перестают отодвигаться...
                obj2.st_x = obj2.x;
                obj2.moveObjRight = 0;
                }       
}

Так же не могу понять, мне необходимо чтобы при повторном щелчке по объекту все "отодвинутые" двигались обратно. Или же если щелчок по другому объекту, то необходимо "отодвинутые" поставить на место и начать перемещение уже относительно того по которому щелкнули...

Извините за корявость изложения:)))

Для ясности скажу, что именно я пытаюсь сделать:
есть ряд картинок, при щелчке по одной из них все правостоящие отодвигаются в сторону, и рядом с той по которой щелкнули появляется блок с описанием, при щелчке по другой, все обратно задвигается и действие повторяется уже относительно той, по которой щелкнули.

etc 30.01.2008 02:50

Ваше решение коряво уже тем, что вы код в кадре пишете.

xomka 30.01.2008 14:32

Хм.. а где же его писать? :)

etc 30.01.2008 14:41

В классах.

xomka 30.01.2008 14:46

я бы с радостью... но времени на полноценное изучение нет, а надо быстренько сделать все

VovkaMorkovka 30.01.2008 14:50

А вы так будете "быстренько" всю жизнь делать ерунду и получать за это ерунду, а оно Вам надо? Лучше потратить время на изучение раз, даже если заказчик кричит мне надо на вчера - сам он дурак значит, что довел до такого состояния

xomka 30.01.2008 15:01

Уважаемые форумчане, если у вас нет желания помочь или по каким-то религиозно/политическим/психическим причинам ваше эго не позволяет это сделать, то можно ничего не писать.

VovkaMorkovka у меня абсолютно другая специализация, и изучать полноценно флеш из-за одного задания не имею возможности


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

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