是否有办法防止DisplayObject的高度属性的自动更改?它会自动调整大小以匹配内容,尽管我的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);
}
}
}发布于 2011-03-08 14:00:24
"hacky“解决方案可能是向敌人添加一个形状,该形状具有您想要的最大大小,然后将其设置为不可见。我用这种方式为对象创建了命中框,并且运行得很好。
一种方法是在Flash中创建对象时添加它。只需绘制它并将其定位于您想要的形状,然后给它一个实例名称,比如"sizeHolder“。在你创造了敌人之后,你会打电话给
enemy.sizeHolder.visible = false;在Flash中,您可以将其放置在另一个时间线上,然后使该时间线不可见并锁定它,这样在编辑实际对象时它不会妨碍您。
另一种方法是通过代码添加它。在另一个DisplayObject中绘制对象,将其设置为不可见,然后将其设置为addChild给敌人。
发布于 2011-03-11 08:23:11
这与实例化整个SWF有关,并且必须传递1帧才能将其同步到主swf。我要做的是导出.fla中的符号,然后在Flex中使用“嵌入符号”语法:
[Embed(source='enemy.swf#Symbol1')]
private var swf:Class;在这种情况下,即使在第一个ENTER_FRAME中,高度也是一致的。如果它不是您想要的高度,您可以使用不可见的形状来设置边界。
发布于 2011-03-16 06:54:32
是敌人精灵动画序列变化的一部分,height.This是动画过程的一部分。因此,每个框架的实际高度将根据雪碧的包围框而变化。正如您很好地观察到的,这是默认行为。
方法:
calculations.(better)
您经常会发现,您会在操作脚本中遇到一些特性,而不是按照您希望的方式工作,to.Whats重要的是您要调整代码以方便解决方案。当和编码/方法允许更容易地进行进一步的更改/扩展时,它不会攻击y或效率低下。
P.S:
这将取决于情况,但就我个人而言,我宁愿高度是动态的,根据精灵动画的例子,所以任何对敌人的打击,仅仅是在敌人头顶上的射弹,都不会真正杀死敌人。
https://stackoverflow.com/questions/5232374
复制相似问题