强制复杂Flash对象的大小

时间:2011-01-11 15:51:00

标签: flash actionscript-3

正如我最近发现的那样,在width上设置height / Sprite属性只会通过缩放实际来强制Sprite符合给定的维度大小,由Flash根据呈现的内容计算。

这让我很困惑。如果我有一个使用Sprite绘制的自定义Graphics子类,如何在初始渲染之前进行布局 - 在第一次绘制之前,该大小将为零?

对于一个更复杂的问题,假设我有一个2D游戏世界,其对象遍布广泛的区域,世界坐标从(0,0)到(5000,5000),其中每个对象的大小可能高达100×100。 我希望有一个Flash组件,它是“游戏窗口”,并且具有固定大小,如400x300,渲染游戏世界的一部分。那么如何将游戏窗口大小强制为400x300像素?我可以绘制一个400x300的矩形来获得正确的尺寸但是如果我绘制任何部分在视野中的物体,他们可以搞砸了。

提供自定义setSize(w,h)方法的正确方法是使用而不是width& height二传手?但即便如此,还是没有办法让Sprite 强制达到我想要的尺寸吗?你是否真的必须抓住每一个渲染并重新缩放它?

3 个答案:

答案 0 :(得分:2)

在我看来,最好的方法是使用面具。你有一个游戏容器,其中添加了所有游戏DisplayObjects,并且在该容器之上,你在游戏容器周围有一个很好的用户界面,中间有一个面具。这样,游戏容器只会在面具的边界内绘制。

答案 1 :(得分:2)

如果我理解正确,你的游戏世界是你窗口的子对象,它的大小总是5000x5000,但你需要窗口的widthheight才能引用窗口本身?使用掩码,正如其他评论所示,然后覆盖widthheight getter和setter:

private var _width: Number = 400;
private var _height : Number = 300;
private var _mask : Sprite;

// some code in between

override public function get width () : Number {
    return _width;
}

override public function get height () : Number {
    return _height;
}

override public function set width ( wid:Number ) : void {
    _width = wid;
    if(_mask != null) _mask.width = wid;
}

override public function set height ( hei : Number ) : void {
    _height = hei;
    if (_mask != null) _mask.height = hei;
}

答案 2 :(得分:0)

强制大小的另一个选择是在想要具有宽度/高度的东西中创建新的Sprite,将它们放置在四个角上。使用代码或通过创作环境来完成此操作非常简单。