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

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


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

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