我目前正在与椋鸟争吵。我刚刚创建了一个名为“Star”的简单类,它继承自starling.display.Sprite。在“onAddedToStage”函数的这个类中,我有以下代码:
img = new Image(Assets.getTextureAtlas(Assets.ATLAS_MENU).getTexture("star_full.png"));
img.height = 171;
img.width = 179;
img.x = -img.width / 2;
img.y = -img.height / 2;
addChild(img);
不幸的是,另一个类中的以下代码并不真正起作用:
var star:ObjectStar = new ObjectStar(starsCount == totalStars);
star.x = 286;
star.y = 161;
star.width = 73;
star.height = 70;
addChild(star);
对象在正确的位置绘制,但宽度和高度仍然是171和179,而不是像我希望的那样73和70。 这是一个与椋鸟有关的问题还是我真的很蠢?
答案 0 :(得分:0)
我对Starling并不熟悉,但我相信你所看到的是Flash中的正常行为。如果你有一个Sprite,它有一个100x100的红色框,你将它放入另一个Sprite,并将父精灵的宽度设置为200x200,红色框仍将以100x100像素绘制。我有一种感觉以前版本的闪存,当使用AS2时,表现不同(即你期望它的方式)但是当使用AS3时,它没有。
无论如何......解决问题的一种方法是覆盖ObjectStar类中的宽度和高度设置器,就像这样;
override public function set width(value:Number):void
{
img.width = value;
super.width = value;
}
override public function set height(value:Number):void
{
img.height = value;
super.height = value;
}
因此,这样,当你设置ObjectStar的宽度和高度时,你也明确地设置了img的宽度和高度。
(显然,您需要保留对您创建的'img'的引用。)