AS3:调整精灵大小而不调整其BitmapFill(或其内容)的大小?

时间:2010-11-01 23:43:44

标签: actionscript-3 actionscript resize bitmap sprite

编辑#2 我找到了解决方案,它比我希望的更简单。谢谢你的时间。 =)(用完整的解决方案回答了我自己的问题)

编辑:我很抱歉我的帖子不够透明。我会尝试迭代一点清晰度。我不是简单地试图包含东西并且在没有调整内容大小的情况下调整容器大小。我只想使用一个简单的MovieClip .. 我主要关注的是使用BitmapFill 。我正在尝试为容器制作重复的背景图像;到目前为止,我能够将我的BitmapFill精灵绘制到我想要的大小。 (这是舞台的高度)但是当舞台调整大小时,我想重新调整我的容器大小但是我的容器BitmapFill裁剪或添加更多窗口调整大小更大或更小。请允许我说明我的意思:

alt text

我希望这可以解决任何混乱,并帮助解决任何问题。

-------原帖:

我有一个简单的矩形精灵,它填充了来自库的位图和一个简单的调整大小处理函数,可以检测窗口的大小调整。

我想要做的是让我的矩形调整到stage.stageHeight的高度,保持其位图填充,但不调整大小位图填充或精灵内的任何子项。

从我读过的内容来看,这有点棘手,因为精灵会根据它所包含的内容进行调整..或者......就是这样...我真的不知道了......我看到一个例子一个人扩展了精灵班,但我不知道为什么或如何......

在我的库中有一个名为'pattern'的图像,我的代码如下所示:

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

stage.addEventListener(Event.RESIZE, resizeHandler, false, 0, true);

var bgData:pattern = new pattern(0,0);
var bg:Sprite = new Sprite();

bg.graphics.beginBitmapFill(bgData, null, true, false);
bg.graphics.drawRect( 0, 0, 80, stage.stageHeight);
bg.graphics.endFill();
addChild(bg);

function resizeHandler(e:Event=null):void 
{
 trace("dimensions are: " + stage.stageWidth + " x " + stage.stageHeight);
 bg.height = stage.stageHeight;  //simply makes the fill resize also
}

2 个答案:

答案 0 :(得分:2)

哦,我很无聊。答案很简单。

我需要做的就是清除图形然后重绘它们。

我不知道清楚的();功能..

完整修订后的代码如下:

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

stage.addEventListener(Event.RESIZE, resizeHandler, false, 0, true);

var bgData:pattern = new pattern(0,0);
var bg:Sprite = new Sprite();

bg.graphics.beginBitmapFill(bgData, null, true, false);
bg.graphics.drawRect( 0, 0, 80, stage.stageHeight);
bg.graphics.endFill();
addChild(bg);

function resizeHandler(e:Event=null):void 
{
 trace("dimensions are: " + stage.stageWidth + " x " + stage.stageHeight);
 bg.graphics.clear();

 bg.graphics.beginBitmapFill(bgData, null, true, false);
 bg.graphics.drawRect( 0, 0, 80, stage.stageHeight);

 bg.graphics.endFill();
}

感谢所有人,抱歉这可能浪费空间。

答案 1 :(得分:1)

由于Sprite会调整其内容大小,您可以使用Shape来调整Sprite的大小。更改Shape大小将有效调整Sprite的大小,而无需调整Sprite的其他子项的大小。


var bg:Sprite = new Sprite();
addChild( bg );

var fill:Shape = new Shape();
//you can make the fill transparent
with( fill )
{
   graphics.beginFill( 0 , 0 );
   graphics.drawRect( 0 , 0 , anyWidth  , anhyHeight );
   graphics.endFill();
}
bg.addChild(fill);

//then add the fill that you want visible
var bgFill:Sprite = new Sprite();
//add the graphics here
bg.addChild(bgFill );


function resizeSprite(event:Event ):void
{
    // bgFill will not be resized
    fill.width = stage.stageWidth;
    fill.height = stage.stageHeight;
}