Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Создание безымянного объекта (не работает) (http://www.flasher.ru/forum/showthread.php?t=76972)

ethereal999 16.03.2006 02:30

Создание безымянного объекта (не работает)
 
Есть такой код из Пеннера:
Код:

Color.prototype.setBrightness = function (bright){
        var trans = this.getTransform();
        with (trans){
                ra = ga = ba = 100 - Math.abs (bright);
                rb = gb = bb = (bright > 0) ? bright * (256/100) : 0;
        }
        this.setTransform (trans);
}

MovieClip.prototype.setBrightness = function (bright){
        (new Color(this)).setBrightness (bright);
}

mc.setBrightness (50);

так Флэш говорит, что нет такого метода для Color (хотя я только что его создал). А вот такой код работает:
Код:

MovieClip.prototype.setBrightness = function (bright){
        var c = new Color (this);
        c.setBrightness (bright);
}

mc.setBrightness (50);

Вопрос: так почему не работает конструкция (new Color(this)) для вновь созданного метода ?

Король 16.03.2006 02:49

Эксперимент показал, что такой синтаксис (*new Smth().func()*) работает только с экземплярами Object
почему - самому интересно

ethereal999 16.03.2006 09:22

ну раз уж заговорил про Color, то я немного переработал метод Пеннера с учетом того, что в 8-ке Color не приветствуется:
Код:

import flash.geom.Transform;
import flash.geom.ColorTransform;

MovieClip.prototype.setBrightness = function (bright){
        var mult = 1 - Math.abs (bright) / 100;
        var offset = (bright > 0) ? bright * 2.56 : 0;
        (new Transform (this)).colorTransform = new ColorTransform (mult, mult, mult, this._alpha / 100, offset, offset, offset, 0);
}

mc.setBrightness (50);


Король 16.03.2006 09:27

это конечно клево, но это не объясняет.
подождем матерых теоретиков.

andr64 16.03.2006 19:06

а так?
Код:

Color.prototype.setBrightness = function(bright) {
        var trans = this.getTransform();
        with (trans) {
                ra = ga=ba=100-Math.abs(bright);
                rb = gb=bb=(bright>0) ? bright*(256/100) : 0;
        }
        this.setTransform(trans);
};
MovieClip.prototype.setBrightness = function(bright) {
        Object(new Color(this)).setBrightness(bright);
};
mc.setBrightness(50);


Король 16.03.2006 20:04

andr64, я тебе могу написать 300 способов реализовать этот алгоритм, но ни один из них не является объяснением того, почему не работает самый первый.

__i 16.03.2006 20:38

гы, интересно девки пляшуть %(

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

silin 16.03.2006 20:53

Цитата:

Сообщение от ethereal999
Есть такой код из Пеннера:
Код:

Color.prototype.setBrightness = function (bright){
        var trans = this.getTransform();
        with (trans){
                ra = ga = ba = 100 - Math.abs (bright);
                rb = gb = bb = (bright > 0) ? bright * (256/100) : 0;
        }
        this.setTransform (trans);
}

MovieClip.prototype.setBrightness = function (bright){
        (new Color(this)).setBrightness (bright);
}

mc.setBrightness (50);

так Флэш говорит, что нет такого метода для Color (хотя я только что его создал). А вот такой код работает:
Код:

MovieClip.prototype.setBrightness = function (bright){
        var c = new Color (this);
        c.setBrightness (bright);
}

mc.setBrightness (50);

Вопрос: так почему не работает конструкция (new Color(this)) для вновь созданного метода ?

типичные придирки AS2 компилятора: класс не динамический - ничего не добавишь..,
компилируем как AS1 и все ОК.
зы: второй вариант проходит, потому что var c не типизирована (проверки нет), поставь var c : Color и получишь тот же еррор..
зыы:проходит и такой вариант (компилятор 'не знает' чего вызываем):
Код:

MovieClip.prototype.setBrightness = function (bright){
        (new Color(this))["setBrightness"] (bright);
}


ethereal999 16.03.2006 20:54

andr64
Отлищщно ! Спасибо, дружище.

silin ох уж эти заковыристости...


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

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