Actionscript 3 为什么sprite graphics.drawRect可以';你工作不好吗?

Actionscript 3 为什么sprite graphics.drawRect可以';你工作不好吗?,actionscript-3,flash,Actionscript 3,Flash,考虑以下代码: package { import flash.display.Sprite; import flash.display.BitmapData; import flash.display.Bitmap; import flash.events.Event;

考虑以下代码:

                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();
                }
                }
                }
包
{
导入flash.display.Sprite;
导入flash.display.BitmapData;
导入flash.display.Bitmap;
导入flash.events.Event;
公共类SampleBitmap扩展了Sprite
{
公共函数SampleBitmap(){
//生成两个位图数据对象数据A,数据B
//达塔是100×100的深绿色矩形
var dataA:BitmapData=新的BitmapData(100100,true,0xff669900);
//数据库是100×100的橙黄色矩形
var-dataB:BitmapData=新的BitmapData(100100,true,0xffFF9900);
//分别生成三个位图显示对象
var bitmapA:Bitmap=新位图(dataA);
var bitmapB:位图=新位图(数据);
var bitmapC:Bitmap=新位图(dataB.clone())//将数据库复制了一份
bitmapA.bitmapData=dataB;
//bitmapA:将数据库替换了达塔此时bitmapA和位图持有的都是数据库
bitmappb.x=200;
bitmapC.x=400;
bitmapA.x=500;
bitmapA.y=500;
//加入显示列表 
addChild(bitmapA);
addChild(bitmappb);
addChild(bitmapC);
痕迹(阶段、宽度);
//改变数据库的像素信息,把它中心20×20的像素都改成了红色 

对于(var i:int=40;i而言,问题在于这一行:

this.graphics.drawRect(0,0,this.width,this.height)
这里,这个实际上是指容器(SampleBitmap类的实例),其宽度由添加到其中的三个框决定

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


编辑

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

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

为false,因为输出为400和600

'这实际上是指容器(SampleBitmap类的实例)其宽度由您添加到其中的三个框决定。如何由您添加到其中的三个框决定。三个框的宽度之和???这只是对未来的一点建议。当使用图形类绘制形状时,您在绘制时不应调整x,y坐标。这将基于0,0+x,y点进行绘制r你的形状。如果你想再次调整x,y,你必须重新绘制整个形状。取而代之的是,在0,0处绘制它们,并使用它们的x和y属性移动它们。
            trace(this.width);  //the output is 600
            trace(this.height); //the output is 600