Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   .graphics.drawRoundRect() Возможно переписать/заменить на свою ф-цию? (http://www.flasher.ru/forum/showthread.php?t=105776)

wvxvw 23.12.2007 19:27

.graphics.drawRoundRect() Возможно переписать/заменить на свою ф-цию?
 
Ну, просто эти углы у него совсем не круглые какие-то получаются, а вызовов этого самого метода по коду раскидано... много вобщем. Хотелось бы просто одним движением их всюду заменить.

BlooDHounD 23.12.2007 22:57

если пишешь в эклипсе, там есть замена по файлам.

wvxvw 23.12.2007 23:25

А нельзя что-нибудь типа override Graphics.drawRoundRect(){...}?
Ну, вроде как переопределить чего делать в этом методе.

Зы. Не, не в эклипсе, вот на работе ЦС3 стоит, в ней от нечего делать чего-то ваяю %) Можно и Вордом, конечно, поменять =) Но, есть уже зарезервированые слова (синеньким подсвечиваться будут =).
Ну, как бы нет смысла пользоваться встроенным методом, т.как нехорошо получается. А функционал-то такой же останется =)

BlooDHounD 24.12.2007 11:03

ну тогда не выйдет :) экземпляр Graphics создаётся без твоего участия. значит не получится переопределить.

wvxvw 24.12.2007 18:11

Код:

package {
    import flash.display.Sprite;
        import flash.display.Graphics;

    public class PowerSprite extends Sprite {
                private var __circle:Sprite;
        public function PowerSprite() {
            Graphics.prototype.someFunc = function():void {
                                trace("custom function");
                        }
                        __circle = new Sprite();
                        __circle.graphics.beginFill(0,1);
                        __circle.graphics.drawCircle(0,0,100);
                        __circle.graphics.endFill();
                        this.addChild(__circle);
                        __circle.graphics["someFunc"]();
        }
    }
}

Вот, все чего хочется - не писать квадратные скобки и кавычки %)
Чего-то читал про настройки компайлера (-es/-аs3) и namespace... но, как-то то ли не дошло, то ли я что-то не то читал =)

etc 24.12.2007 19:13

Ну а что мешает сделать свое свойство, типа canvas, склонировать все методы Graphics и дописать свои? Прям так обязательно использовать graphics?

wvxvw 24.12.2007 19:28

Ну, конечно же можно. Но я это делаю скорее из любопытста и в целях самообразования %), возможно, в какой-то ситуации нужно будет именно так, а не по-другому. Т.е. мне не важно получить желаемый результат, а использовать именно эту возможность.
+ мне действительно мешает ф-ция рисования прямоугольников с кривыми (не закругленными) %) углами =) Хочется чтобы ее впринципе в проекте не существовало.

ЗЫ. Т.е. не важно, будет ли это класс Graphics или, например, Array. Вот, как сделать, чтобы
Код:

var a:Array = new Array();
trace(a.myFunc()); // Hi, World!


etc 24.12.2007 19:30

Задачи надо решать по мере их возникновения, не придумывая при этом себе дополнительные сложности.
У тебя ровным счетом наоборот, задачи мнимые, плюс с тучей дополнительных сложностей.

В случае с Array никаких проблем в использовании наследования нет.

krolser 26.12.2007 14:53

Цитата:

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

А если попробовать зарание установить стиль линии и при этом указать параметр pixelHinting. Более подро об этом параметре можно глянуть в лайфдоках

Вот пример где этот параметр сначала не установлен (по умолчанию), а во второй части установлен.

Код:

graphics.lineStyle(1);
graphics.drawRoundRect(10,10,100,100,20,20);

graphics.lineStyle(1,0,1,true);
graphics.drawRoundRect(10,130,100,100,20,20);


wvxvw 27.12.2007 04:42

там pixelHinting без разницы - попробуй радиусы поменьше поставить - сам все поймешь. Там просто алгоритм какой-то нехороший, который эти углы рисует.
Код:

graphics.lineStyle(1);
graphics.drawRoundRect(10,10,100,100,20,20);

graphics.lineStyle(1,0,1,true);
graphics.drawRoundRect(10,130,100,100,20,20);

graphics.lineStyle(1);
graphics.moveTo(20,0);
graphics.lineTo(110,0);
graphics.curveTo(130,0,130,20);
graphics.lineTo(130,80);
graphics.curveTo(130,100,110,100);
graphics.lineTo(20,100);
graphics.curveTo(0,100,0,80);
graphics.lineTo(0,20);
graphics.curveTo(0,0,20,0);

Просто поставь рядом и посмотри на разницу.


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

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