有没有办法阻止自动更改DisplayObject的height属性?虽然我的swf文件高度为32像素,但它会自动调整大小以匹配内容。下面的代码可以证明这一点,第一帧 enemy.height 是32但后来是27.5,这会弄乱我的剧本。
getRect()和getBounds()返回完全相同。另外,我想知道为什么在第一帧中显示正确的高度,在第二帧中它会改变,它应该从头开始显示为27.5。
package {
import flash.display.Sprite;
import flash.events.Event;
public class Main extends Sprite {
private var enemy:Sprite;
[Embed(source = '../lib/enemy.swf')] private var swf:Class;
public function Main():void {
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function update(e:Event):void {
trace(enemy.height);
}
private function init(e:Event = null):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
enemy = new swf();
addChild(enemy);
addEventListener(Event.ENTER_FRAME, update);
}
}
}
答案 0 :(得分:4)
这与您实例化整个SWF的事实有关,并且必须通过1帧才能将其同步到主swf。我要做的是导出.fla中的符号,然后在Flex中使用“嵌入符号”语法:
[Embed(source='enemy.swf#Symbol1')]
private var swf:Class;
在这种情况下,即使在第一个ENTER_FRAME
中,高度也会保持一致。如果它不是您想要的高度,您可以使用不可见的形状来设置边界。
答案 1 :(得分:2)
“hacky”解决方案可能是为具有您想要的最大尺寸的敌人添加形状,然后将其设置为不可见。我已经创建了对象的命中框,它运行得很好。
一种方法是在Flash IDE中创建对象时添加它。只需绘制它并将其定位为您想要的形状,然后给它一个实例名称,如“sizeHolder”。创建敌人后,您将调用
enemy.sizeHolder.visible = false;
在Flash IDE中,您可以将其放在另一个时间轴上,然后使该时间轴不可见并将其锁定,这样在编辑实际对象时就不会妨碍它。
另一种方法是通过代码添加它。在另一个DisplayObject中绘制对象,将其设置为不可见,然后将其添加到敌人。
答案 2 :(得分:1)
敌人精灵动画序列 高度会有所不同。这是其中的一部分 动画过程。因此 每帧的实际高度会有所不同 基于精灵的边界框。 正如你很好地观察到的那样 默认行为。
方式:
您经常会发现,您会发现动作脚本中的功能无法按照您希望的方式工作。重要的是您调整编码以促进解决方案。当编码/方法允许轻松进行进一步的更改/扩展时,它不会破解或效率低下。
P.S:
这取决于情况,但我个人认为根据精灵动画实例,高度是动态的,因此任何对射弹几乎超过其头部的命中物都不会杀死敌人。
答案 3 :(得分:0)
尝试
import flash.display.StageAlign;
import flash.display.StageScaleMode;
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;