Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как узнать индекс через currentTarget? (http://www.flasher.ru/forum/showthread.php?t=124493)

vvvvvvf 01.05.2009 01:25

Как узнать индекс через currentTarget?
 
Доброго времени суток вопрос прямо в коде.

Код AS3:

var list:Array = [];
        for (var i:int = 0; i <= 5; i++) {
                list[i] = new Sprite();
                list[i].addEventListener(MouseEvent.ROLL_OUT, overPoint);
        }
        function overPoint(e:MouseEvent):void {
                // Как тут узнать номер индекса то есть i?
        }


iNils 01.05.2009 01:32

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

Crash512 01.05.2009 01:32

Использовать, например, класс Delegate...

Код AS3:

package
{
 
public class Delegate
{
  public static function create(handler:Function,...args):Function
  {
    return function(...innerArgs):void
    {
      handler.apply(this,innerArgs.concat(args));
    }
  }
 }
}

Здесь подробней:

http://gorbatov.blogspot.com/2007/09...amescript.html

wvxvw 01.05.2009 01:56

@ Crash512:
Зачем такое кому-то советовать?..
Это нужно было в АС2, в АС3 это не то что излишество, это вообще плохо так делать.
Я это чудо еще на ас.орг видел, но на каждой странице повторятся как-то не тянет, и обязательно после каждых 10 сообщений должен найтись кто-то, кто в очередной раз предложит такую или подобную ересь использовать

@ vvvvvvf:
Собирайте таргетов в Dictionary и раздавайте ключи по номерам:
Код AS3:

var d:Dictionary = new Dictionary();
d[someSprite] = 1;
trace(d[someSprite]); // 1

и никакой порнографии...

vvvvvvf 01.05.2009 02:26

А можно что-то типа этого?

Помню на javascript что-то подобное так реализовывал смысл в том чтобы добавить в объект новое свойство которое можно менять.

Код AS3:

var list:Array = [];
        for (var i:int = 0; i <= 5; i++) {
                list[i] = new Sprite();
                list[i].addEventListener(MouseEvent.ROLL_OUT, overPoint);
                list[i].prortotype.id = i;
        }
        function overPoint(e:MouseEvent):void {
                e.currentTarget.id;
        }


BlooDHounD 01.05.2009 02:47

wvxvw, даже не знаю, почему мне это даже в АС2 ни разу не понадобилось.

vvvvvvf 01.05.2009 03:02

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

wvxvw 01.05.2009 03:12

Цитата:

Сообщение от BlooDHounD (Сообщение 816878)
wvxvw, даже не знаю, почему мне это даже в АС2 ни разу не понадобилось.

Ну, наверное просто использовал apply(), по крайней мере нет ничего нехорошего в использовании делегата в AS2.

Цитата:

Сообщение от vvvvvvf (Сообщение 816879)
ну так что существуют подобные методы позволяющие записывать новые параметры в класс?

Да, существуют, но для того, что вы пытаетесь сделать они не нужны.

vvvvvvf 01.05.2009 03:14

Цитата:

Сообщение от wvxvw (Сообщение 816880)
Да, существуют, но для того, что вы пытаетесь сделать они не нужны.

Дайте пожалуйста пример.

wvxvw 01.05.2009 03:17

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

Анекдот в тему:
* в автобусе *
Бабушка:
- молодой человек, может быть вы встанете?
Молодой человек:
- ага, конечно, сейчас я встану, а ты тут же сядешь!

vvvvvvf 01.05.2009 03:25

Хорошо вопрос такой как можно добавить новое свойство в классе, в подобном коде?
Код AS3:

var sp:Sprite = new Sprite();

то есть как можно задать новое свойство например sp.id = 123;

просто мне по любому надо это знать, если очень жаба душит ответить прямо то дайте ссылку на документацию я с удовольствием почитаю в данный момент прочитал мануал про prototype то там так и не нашел как правильно присваивать новые свойства =((

wvxvw 01.05.2009 04:06

В таком - никак нельзя, Sprite - "запечатаный" не динамический класс, т.е. ему свойства никак нельзя добавить.
И, еще раз, не нужны спрайту ID, каждый спрайт уникален, не нужно им еще бирки цеплять, все равно двух одинаковых не будет, а вот прицепить две одинаковые бирки - это на раз.

BlooDHounD 01.05.2009 04:37

Цитата:

Ну, наверное просто использовал apply()
wvxvw, я что-то не понимаю как связаны apply и Delegate.

wvxvw 01.05.2009 05:08

А вот это мне странно :)
делегирование - в случае AS2 Delegate класса это как раз и был вызов функции в заданом контексте (делегирование == передача полномочий). Которое осуществлялось с помощью apply(), т.как apply() именно для этого и предназначена.

BlooDHounD 01.05.2009 05:31

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

вот вызов функции в заданном контексте:
Код:

foo.apply( this, 5 )
делигейт в конечном итоге выглядит где так:
Код:

var a:Object = this;
var xml:XML = new XML();
xml.onLoad = function() {
    return foo.apply( a, arguments );
}

заменяется делегейт приблизительно так:
Код:

var a:Object = this;
var xml:XML = new XML();
xml.onLoad = function(success:Boolean):Void {
    a.foo( success );
}

и никаких apply не нужно. все параметры методов известны.

vvvvvvf 01.05.2009 13:53

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

Как хорошо, что есть еще нормальные люди, вот самый верный вариант мне подсказали на другом форуме
Код AS3:

package Battle{
        import flash.display.Sprite;
 
        public class MySprite extends Sprite {
                public var id:String;
 
                public function MySprite():void {
                        super();
                }
        }
}


Теперь осталось пропахать только все классы и заменить там Sprite на MySprite :victory:

silin 01.05.2009 16:03

чтобы не экстендить и не пропахивать ничего, можно этот id в nаme Sprite' а хранить, если нормальные решения так не по нутру

vvvvvvf 01.05.2009 16:13

Цитата:

Сообщение от silin (Сообщение 816930)
чтобы не экстендить и не пропахивать ничего, можно этот id в nаme Sprite' а хранить, если нормальные решения так не по нутру

Дайте пожалуйста пример :)

silin 01.05.2009 16:33

Код AS3:

var list:Array = [];
for (var i:int = 0; i <= 5; i++)
{
        var sprite:Sprite = new Sprite();
        list.push(sprite);
        sprite.name = i.toString();
        sprite.addEventListener(MouseEvent.ROLL_OUT, overPoint);
}
function overPoint(e:MouseEvent):void
{
                trace(e.currentTarget.name);
}


cleptoman 01.05.2009 16:51

а почему просто экстенд не подходит то?

etc 01.05.2009 17:10

Цитата:

Сообщение от cleptoman (Сообщение 816939)
а почему просто экстенд не подходит то?

А мне больше непонятно, чем не угодил Dictionary, использование которого не требует изменения name и наследования.

silin 01.05.2009 17:18

cleptoman, подходит, все нормально
просто
Цитата:

Сообщение от wvxvw (Сообщение 816891)
не нужны спрайту ID, каждый спрайт уникален, не нужно им еще бирки цеплять, все равно двух одинаковых не будет, а вот прицепить две одинаковые бирки - это на раз.


BlooDHounD 01.05.2009 23:11

Цитата:

Сообщение от vvvvvvf (Сообщение 816916)
BlooDHounD вы уже задрали выеживаться, как же я не люблю подобный тип отношений к пользователям.

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

Сообщение от vvvvvvf (Сообщение 816916)
Если вас спрашивают конкретные вещи, то либо помогите, а если вас так жаба душит, то вообще ничего не пишите все равно от ваших советов мне легче не станет, работодателю нужна именно такая реализация и мне неважно плохо это или хорошо, либо так, либо никак!

Вы меня ни о чём не спрашивали, и Вам я совет даже не пытался дать. общался я с wvxvw, а не с Вами. и поэтому не понимаю Вашу параноидальную агрессию.

Psycho Tiger 02.05.2009 13:45

Да экстенд всем подходит, просто ради мимолетного id`а, который понадобиться один раз на 5 строчек кода глупо создавать отдельный класс.


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

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