正如我最近发现的那样,在width
上设置height
/ Sprite
属性只会通过缩放实际来强制Sprite
符合给定的维度大小,由Flash根据呈现的内容计算。
这让我很困惑。如果我有一个使用Sprite
绘制的自定义Graphics
子类,如何在初始渲染之前进行布局 - 在第一次绘制之前,该大小将为零?
对于一个更复杂的问题,假设我有一个2D游戏世界,其对象遍布广泛的区域,世界坐标从(0,0)到(5000,5000),其中每个对象的大小可能高达100×100。 我希望有一个Flash组件,它是“游戏窗口”,并且具有固定大小,如400x300,渲染游戏世界的一部分。那么如何将游戏窗口大小强制为400x300像素?我可以绘制一个400x300的矩形来获得正确的尺寸但是如果我绘制任何部分在视野中的物体,他们可以搞砸了。
提供自定义setSize(w,h)
方法的正确方法是使用而不是width
& height
二传手?但即便如此,还是没有办法让Sprite
强制达到我想要的尺寸吗?你是否真的必须抓住每一个渲染并重新缩放它?
答案 0 :(得分:2)
在我看来,最好的方法是使用面具。你有一个游戏容器,其中添加了所有游戏DisplayObjects,并且在该容器之上,你在游戏容器周围有一个很好的用户界面,中间有一个面具。这样,游戏容器只会在面具的边界内绘制。
答案 1 :(得分:2)
如果我理解正确,你的游戏世界是你窗口的子对象,它的大小总是5000x5000,但你需要窗口的width
和height
才能引用窗口本身?使用掩码,正如其他评论所示,然后覆盖width
和height
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,将它们放置在四个角上。使用代码或通过创作环境来完成此操作非常简单。