无法访问ActionScript 3 Sprite.graphics.x方法

时间:2009-08-26 01:51:31

标签: actionscript-3

我有这段代码:

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 个答案:

答案 0 :(得分:2)

只需使用 this.graphics.method 即可避免程序包名称造成的混淆。

  

修改 - 评论后。

经过一些麻烦之后,似乎虽然this.graphics跟踪了正确的Graphics对象,但是在Ball类中查看了this.graphics.method。不知道是什么混淆了这个,但它可以通过简单的铸造来解决。

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 :(得分:1)

我担心问题必须在您的代码中的其他地方。如果我把你的课程清理干净,那么就这样编译:

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与属性名称图形冲突。您需要重命名包及其所在的目录。

答案 2 :(得分:0)

你的班级无法将自己添加到舞台上。在将其添加到显示列表之前,它没有引用该阶段。您的应用程序类需要创建球并将其添加到舞台上。 此外,它只是舞台,而不是_stage。