Не удается получить доступ к методам ActionScript 3 Sprite.graphics.x - PullRequest
0 голосов
/ 26 августа 2009

У меня есть этот код:

package graphics {
    import flash.display.Sprite;
    import flash.events.*;

    public class Ball extends Sprite {
        public function Ball(_stage){
            _stage.addChild(this);
            drawBall();
        }
        private function drawBall(){
            graphics.beginFill(0x0000CC);
            graphics.lineStyle(2,0x000000,1);
            graphics.drawCircle(0,0,10);
            graphics.endFill();
        }
    }
}

ДОБАВЛЕНО:
и класс, который я передаю в mxmlc
:

package {
    import flash.display.Sprite;
    import graphics.*;

    [SWF(width='1024', height='768', backgroundColor='#FFFFFF', frameRate='30')]

    public class Application extends Sprite {
        public function Application(){
            var ball:Ball = new Ball(this);
        }
    }
}

За исключением того, что при компиляции я получаю следующую ошибку:

ball.as(11): col: 14 Error: Call to a possibly undefined method beginFill.

            graphics.beginFill(0x0000CC);
                     ^

Наряду с остальными тремя вызовами graphics.x ().

Возможно, я здесь что-то не так делаю, но я не знаю что. Вы?

Ответы [ 3 ]

2 голосов
/ 26 августа 2009

Просто используйте this.graphics.method , чтобы избежать путаницы, создаваемой именем вашего пакета.

Редактировать - после комментария.

После некоторого возни, кажется, что хотя this.graphics отслеживает правильный объект Graphics, как и ожидалось, this.graphics.method ищется в классе Ball. Не знаю, что все это так портит, но это можно решить с помощью простого приведения.

package graphics {
    import flash.display.Graphics;
        import flash.display.Sprite;
        import flash.events.*;

        public class Ball extends Sprite {
                public function Ball(_stage) {
                        _stage.addChild(this);
                        drawBall();
                }
                private function drawBall() {
                var g:Graphics = this.graphics as Graphics;
                        g.beginFill(0x0000CC);
                        g.lineStyle(2,0x000000,1);
                        g.drawCircle(0,0,10);
                        g.endFill();
                }
        }
}

Удачи

1 голос
/ 26 августа 2009

Боюсь, проблема в другом месте вашего кода. Если я возьму ваш класс и вычистлю его, он скомпилируется так:

package
{
import flash.display.Sprite;

public class Ball extends Sprite 
{
    public function Ball()
    {
        drawBall();
    }

    private function drawBall():void
    {
        graphics.beginFill(0x0000CC);
        graphics.lineStyle(2,0x000000,1);
        graphics.drawCircle(0,0,10);
        graphics.endFill();
    }
}
}

    $ mxmlc Ball.as 
    Loading configuration file [...]/flex-config.xml
    /private/tmp/actionscript/Ball.swf (666 bytes)

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


Редактировать: На основании новой информации:

Ваше пространство имен graphics для класса Ball конфликтует с графикой имени свойства. Вам необходимо переименовать пакет и каталог, в котором он находится.

0 голосов
/ 26 августа 2009

Ваш класс не может добавить себя на сцену. Он не имеет ссылки на сцену, пока не будет добавлен в список отображения. Класс вашего приложения должен создать шарик и добавить его на сцену. Кроме того, это просто сцена, а не _stage.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...