2011-11-30 42 views
2

我试图让一个简单的AS3应用程序启动并运行,并且出于某种原因,我无法获得一个精灵来显示。在这一点上,我想要做的就是获得一个红色的精灵来填补舞台。AS3 Sprite添加到舞台但不可见

public class Main extends Sprite 
{  
    public function Main():void 
    { 
     super(); 

     stage.scaleMode = StageScaleMode.NO_SCALE; 
     stage.align = StageAlign.TOP_LEFT; 

     var square:Sprite = new Sprite(); 

     square.width = stage.stageWidth; 
     square.height = stage.stageHeight; 
     square.x = square.width/2; 
     square.y = square.height/2; 

     square.graphics.clear(); 
     square.graphics.lineStyle(3, 0xFF0000); 
     square.graphics.beginFill(0xFF0000); 
     square.graphics.drawRect(0, 0, width, height); 
     square.graphics.endFill(); 

     square.addEventListener(Event.ADDED_TO_STAGE, addedToStage); 
     square.addEventListener(MouseEvent.CLICK, onClick); 

     addChild(square); 
    } 

    private function addedToStage(e:Event):void 
    { 
      trace("Added sprite to stage");   
    } 
    private function onClick(e:Event):void 
    { 
      trace("Got click on sprite");   
    }  
} 

跟踪显示精灵被添加到舞台上,但不显示任何内容,如果我点击它,在函数的onClick永远不会被调用。如果我使用TextField而不是Sprite,它显示得很好。 Sprites一定有些奇怪的东西。

我在做什么错?

谢谢!

回答

2

试图设置空的宽度和高度Sprite将返回0.看看here

and

请参阅Mr.Marty Wallace的回答。

+0

@Marty华莱士:现在? – Benny

+0

我其实刚刚得到你的意思,对不起。 '+ 1' – Marty

+0

你的链接项目解释得最好。谢谢。 – Greg

2

你的问题就在这里:

square.graphics.drawRect(0, 0, width, height); 

在此行中的为widthheight0。原因是他们指的是你正在工作的类的widthheight属性(Main - 从DisplayObject继承的属性),根据我所能看到的将为零。

你基本上说:

square.graphics.drawRect(0, 0, 0, 0); 

这会使什么。

+0

好的,但是当我改变drawRect(),所以它使用stage.stageWidth和stage.stageHeight,我仍然没有看到任何东西。另外 - 看到上面几行我设置的宽度和高度 - 不会正确设置宽度和高度? – Greg