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

Огнеметчик 08.05.2009 02:40

Помогите разобраться с классами ООП
 
Есть рабочий код, который рисует квадрат:
Код AS3:

package {
        import flash.display.*;
 
        public class test extends Sprite
        {
                public function test()
                {
                        init();
                }
 
                private function init():void {
                        trace("init");
                        var test: Shape = draw();
                        test.x = 200;
                        test.y = 200;
                        addChild(test);
                }
 
                private function draw(): Shape {
                        var rect:Shape = new Shape();
                        rect.graphics.lineStyle(1, 0x000000);
                        rect.graphics.beginFill(0xCCCCCC);
                        rect.graphics.drawRect(0, 0, 20, 20);
                        rect.graphics.endFill();
 
                        return rect;
                }
 
        }
}

Думаю, тут все понятно, функция draw() рисует квадрат, функция init() создает объект типа Shape, в котором рисуется квадрат, задает координаты объекта и выводит его в список отображения. Далее в конструкторе вызывается init() и квадрат появляется на экране.

Хочу функцию рисования квадрата вынести в отдельный класс. Вероятно я чего-то не так делаю, потому что приведенный далее код не работает.

Основной файл проекта содержит код:
Код AS3:

package {
        import classes.MyClass;
        import flash.display.*;
 
        public class test extends Sprite
        {
                public function test()
                {
                        init();
                }               
 
                private function init():void {
                        trace("init");
                        var test: Shape = new MyClass();
                        test.x = 200;
                        test.y = 200;
                        addChild(test);
                }
        }
}

Файл classes/myclass.as содержит код:
Код AS3:

package classes
{
        import flash.display.*;
 
        public class MyClass extends Shape
        {
                public function MyClass()
                {
                        draw();
                }
 
                private function draw(): Shape {
                        var rect:Shape = new Shape();
                        rect.graphics.lineStyle(1, 0x000000);
                        rect.graphics.beginFill(0xCCCCCC);
                        rect.graphics.drawRect(0, 0, 20, 20);
                        rect.graphics.endFill();
 
                        return rect;
                }
 
        }
}

То есть, по моему пониманию, когда я в основном файле проекта создаю объект класса MyClass:
Код AS3:

var test: Shape = new MyClass();

вызывается конструктор класса MyClass, в свою очередь в этом конструкторе вызывается функция draw(), которая возвращает объект типа Shape, который, по моему пониманию, после вызова
Код AS3:

addChild(test);

должен появиться на экране, но не появляется. Что делаю неправильно?

Gaen 08.05.2009 03:12

Вы добавляете на сцену экземпляр MyClass, который наследуется от Shape и в котором должен рисоваться квадрат.
Но вы не рисуете квадрат в нём, в нём вы создаёте шейп rect, и рисуете квадрат в этом rect, и после этого ничего с ним не делаете. Рисовать нужно в самом MyClass.

Короче:
Код AS3:

 
                private function draw(){
                        this.graphics.lineStyle(1, 0x000000);
                        this.graphics.beginFill(0xCCCCCC);
                        this.graphics.drawRect(0, 0, 20, 20);
                        this.graphics.endFill();
                }


Огнеметчик 08.05.2009 09:09

GAIKER, спасибо большое, вы правы.


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

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