2011-03-20 64 views
0

我在乒乓/破砖游戏中遇到了一个奇怪的问题:玩家的特殊能力之一是让第二个球从主体中分离出来其中一个的作用与主要作用在短时间内消失之前一样。问题在于,当第二个球接触到舞台边界并且应该简单地反转其x或y速度(取决于边界命中)时,出于某种奇怪原因,它显然也会增加其宽度和高度属性。图形不会改变,但宽度和高度的值确实(显着),并且这导致了我为奇怪的情况定义的一些stuckHandler方法,在这种情况下,舞会最终部分在舞台后被重复调用。我没有在代码中改变宽度,高度或scaleX/scaleY属性,所以我不知道为什么会发生这种情况。在阅读Adobe文档时,我发现以下两点对此事有潜在的兴趣 -显示对象的宽度/高度有趣的问题

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

  2. 宽度/高度属性:指示显示对象的宽度/高度(以像素为单位)。宽度/高度根据显示对象内容的边界计算。设置宽度/高度属性时,会相应地调整scaleX/scaleY属性。 ---“显示对象的内容”究竟意味着什么?这只是图形还是在某些情况下可能是别的?出于某种原因,速度逆转后内容是否会改变?通过调试打印语句,我发现,在其中宽度与高度扩展scaleX和scaleY属性保持在1,表明Flash不点“了解”对象的大小,有效地改变......

我附上了输出日志,其中显示了与第二个球的位置,速度和大小有关的一些属性,以及它们随时间变化的情况。您可以看到,在速度反转之后,宽度和高度属性显着增加,这表示与边界发生碰撞。另外值得注意的是,第二个球是作为主文档类的子元素创建的(它没有应用于它的变换,实际上从未添加到显示列表中),并且它似乎在适当的舞台全局坐标下运行系统。

ffLog.txt Ball2.txt

回答

0

从您的Ball2类:

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

你添加一些尺寸的小孩球。难怪它的大小增加了。 DisplayObject总是足够大以包含其子元素和/或图形形状。你确定你的对象嵌套正确吗?

+0

......并且这样做了。谢谢! – jeff 2011-03-20 17:29:50