2010-11-01 127 views
2

编辑#2我找到了解决方案,它比我想象的要简单。谢谢你的时间。 =)(使用完整的解决方案回答了我自己的问题)AS3:调整精灵的大小而不调整其BitmapFill(或其内容)?

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

alt text

我希望这将清除任何疑惑,并与任何直答案帮助。

-------原帖:

我有一个简单的矩形精灵与从库位图,当窗口已调整检测一个简单的调整大小处理函数罢了。

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

从我读过的内容来看,这是一个棘手的问题,因为精灵的大小与它所包含的内容有关..或者类似的东西..我真的不知道更多..我看到一个例子当一个人伸出精灵类,但我不知道为什么或如何..

在我的图书馆

有一个称为“模式”的形象,我的代码如下所示:

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

哦,好吧,我很沉闷。答案很简单。

所有我需要做的是明确的,则图形重绘他们..

我不知道明确的();功能..

全面修改后的代码如下:

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(); 
} 

感谢所有,对不起,这个潜在的空间浪费。

+0

+1进入这篇文章写的完全一样:) – www0z0k 2010-11-02 08:43:06

1

由于雪碧将调整其内容,您可以使用Shape来调整您的Sprite的大小。更改形状大小将有效调整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; 
} 

+0

感谢您的迅速回复,我很欣赏您为编写此响应而付出的努力,但是在检查并玩过您的代码之后,看起来您只是将sprite用作另一个sprite的容器。这是一种击败我的问题的目的,因为我完全知道这种遏制方法。我已经更新了我的帖子,尽可能清晰,我希望你能帮助我修改这个问题=)〜PtK – Partack 2010-11-02 02:40:52

+0

没问题,我确实错过了BitmapFill位:(我的阅读倾向太快了!无论如何,恭喜你的回答,多少人可以提供帮助,我认为自己找到答案总是更令人欣慰:) – PatrickS 2010-11-02 05:15:48