显示对象宽度/高度的有趣问题

时间:2011-03-20 08:30:31

标签: actionscript-3 actionscript flash-cs5

我在一场乒乓球/破砖机比赛中遇到了一个奇怪的问题:球员的特殊能力之一就是让第二球从主球中分离出来,并且主要与主球一样。在消失之前的短暂时期。问题在于,当第二个球与阶段边界接触并且应该简单地反转其x或y速度(取决于边界命中)时,由于某些奇怪的原因,它显然也会增加其宽度和高度属性。图形不会改变,但是宽度和高度的值会(大幅度)发生,这会导致我为奇数情况定义的一些stuckHandler方法,其中球部分地在场外被重复调用。代码中没有任何地方可以更改宽度,高度或scaleX / scaleY属性,因此我不知道为什么会发生这种情况。在阅读adobe文档时,我发现以下两点对此事有潜在的兴趣 -

  1. 关键字THIS:对方法包含对象的引用。当脚本执行时,'this'关键字引用包含脚本的对象。在方法体内,'this'关键字引用包含被调用方法的类实例。 ---这两种说法不一样吗?我不太了解脚本开头'this'和方法内'this'之间范围差异的细节......因为第二个球对象是在游戏过程中动态创建的(主球是静态对象)创建了pre-runtime并通过一个独特的驱动程序类Ball控制,并实际上链接到一个控制和构造它的Ball2类,'this'关键字在整个类的不同位置被大量使用以引用该图形。我担心在AS3中围绕“这个”的细微差别的一些混淆可能部分归咎于我所看到的奇怪情况。

  2. 宽度/高度属性:指示显示对象的宽度/高度(以像素为单位)。宽度/高度基于显示对象的内容的边界来计算。设置width / height属性时,将相应地调整scaleX / scaleY属性。 ---“显示对象的内容”究竟是什么意思?这只是图形还是在某些情况下可能是其他东西?由于某种原因,速度反转后内容是否会发生变化?通过调试打印语句,我发现在宽度和高度扩展时,scaleX和scaleY属性保持为1,表明Flash不知道对象的大小有效地改变了......

  3. 我附加了输出日志,其中显示了与第二个球的位置,速度和大小相关的许多属性,以及它们如何随时间变化。您可以看到宽度和高度属性在速度反转后显着增加,表示与边界碰撞。另外值得注意的是,第二个球被创建为主文档类的子类(没有应用它的转换,实际上从未添加到显示列表中)并且它似乎在适当的阶段 - 全局坐标之外操作系统。

    ffLog.txt Ball2.txt

1 个答案:

答案 0 :(得分:0)

从你的Ball2课程:

...
callParts = new CallParts((this.x + (this.width/2)),50);
addChild(callParts);

你正在为球添加一些大小的孩子。难怪它的大小增加了。 DisplayObject总是足以包含其子项和/或图形形状。你确定你的对象是否正确嵌套?