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

pivnoibaron 09.02.2012 22:33

Найти индекс объекта в массиве?
 
Привет. Хотел спросить. Есть двумерный массив. В нем содержаться объекты. Объектами являются квадратики работающие как кнопки, на которые можно кликать. И которые выводятся визуально. Как мне при клике мышкой на любой квадратик ( который содержится в массиве ) узнать какой у этого квадратика индекс? Пробовал так
Код AS3:

for ( var i:uint = 0; i < arayV.length; i++ )
                        {
                                for ( var j:uint  = 0; j < arayV [ i ].length; j++ )
                                {
                                        if ( arayV [ i ] [ j ] = this.boxGame )
                                        {
                                        trace ( "Go" );    // i первый элемент ассива
                                        }
                                }
                        }

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

trace ( "Go" );

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

TanaTiX 09.02.2012 22:45

А если при создании квадратиков делать их наследниками некоего класса, и передавать индекс при создании соответствующих объектов? Тогда в обработчике это будет конструкция типа
Код AS3:

trace((e.target as Square).index);

И не надо будет при каждом клике весь массив лопатить.

Aquahawk 09.02.2012 22:53

Никакое наследование тут ни причём. Объекты разные, значит при сравнении на == будет false
Код AS3:

if ( arayV [ i ] [ j ] = this.boxGame )

Приравниваение!
А нужно сравнение
Разве компилятор варнинг не кидает?
Код AS3:

if ( arayV [ i ] [ j ] == this.boxGame )

нужно

Добавлено через 3 минуты
А обрабатывать клик действительно лучше через таргет.

elder_Nosferatu 09.02.2012 23:07

Код AS3:

function clickHandler(event:MouseEvent):void {
        var btn:SomeClass = event.currentTarget as SomeClass; // Класс квадратика
        for (var i:uint = 0; i < arayV.length; i++) {
                var j:int = arayV.indexOf(btn);
                if (j != -1) {
                        trace("Go: index[", i, j, "]");
                }
        }
}


pivnoibaron 09.02.2012 23:07

Да. Действительно. Нужно == а Я поставил =

HardCoder 09.02.2012 23:55

Вариант TanaTiX +1. Действительно, зачем весь массив дергать? Правда, наследование здесь ни при чем - главное, чтоб конечный "квадратик" имел свойство index:
Код AS3:

public var index:Array = [0, 0];
или
public var index:Vector.<uint> = new <uint>[0, 0];
или
public var index:Object; = {x:0, y:0};


illuzor 10.02.2012 01:15

Цитата:

Сообщение от Aquahawk (Сообщение 1061927)
Разве компилятор варнинг не кидает?

Выдаёт предупреждение, но компилит.

Aquahawk 10.02.2012 12:10

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


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

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