为什么sprite graphics.drawRect不能正常工作?

时间:2012-12-03 09:24:25

标签: actionscript-3 flash

考虑以下代码:

                package 
                {

                import flash.display.Sprite;
                import flash.display.BitmapData;
                import flash.display.Bitmap;
                import flash.events.Event; 

                public class SampleBitmap extends Sprite
                {
                public function SampleBitmap() {
                //生成两个BitmapData对象dataA, dataB
                //dataA是100×100的深绿色矩形
                var dataA:BitmapData = new BitmapData(100,100,true, 0xff669900);
                //dataB是100×100的橙黄色矩形
                var dataB:BitmapData = new BitmapData(100,100,true, 0xffFF9900);
                //分别生成三个位图显示对象
                var bitmapA:Bitmap = new Bitmap(dataA); 
                var bitmapB:Bitmap = new Bitmap(dataB);
                var bitmapC:Bitmap = new Bitmap(dataB.clone()); //将dataB复制了一份
                bitmapA.bitmapData = dataB; 
                //bitmapA:将dataB替换了dataA,此时bitmapA和bitmapB持有的都是dataB
                bitmapB.x = 200;
                bitmapC.x = 400;
                bitmapA.x = 500;
                bitmapA.y = 500;
                //加入显示列表 
                addChild(bitmapA); 
                addChild(bitmapB); 
                addChild(bitmapC); 

                trace(stage.width);
                //改变dataB的像素信息,把它中心20×20的像素都改成了红色 
                for (var i:int = 40; i<60; i++) {
                for (var j:int = 40; j<60; j++) {
                dataB.setPixel(i,j,0xFF0000);
                }
                } 
                trace(this.width);  //the output is 600
                trace(this.height);//the output is 600
                this.graphics.beginFill(0x00ff00);
                this.graphics.drawRect(0,0,this.width,this.height); //trace了一下,this.width,this.height都为600px
                this.graphics.endFill();
                }
                }
                }

结果是: enter image description here

和:我的问题是:为什么绿色不能覆盖所有三个黄色矩形?

1 个答案:

答案 0 :(得分:1)

问题出在这一行:

this.graphics.drawRect(0,0,this.width,this.height)

这里,这个实际上是指容器(SampleBitmap类的实例),其宽度由您添加到其中的三个框决定。

你可能正在寻找的(假设你希望覆盖整个舞台)是:

this.graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight)

enter image description here

<小时/> 的修改

刚刚编译了您的代码和声明:

            trace(this.width);  //the output is 600
            trace(this.height); //the output is 600

为false,因为输出为400&amp; 600