,你有这个错误的原因是因为cherry
不是cPie
对象的属性或方法,它为您cPie
显示对象容器的子显示对象实例名称。要访问cherry
显示对象,您必须使用cPie
对象的继承DisplayObjectContainer
方法,即getChildByName()
方法。还好,这是由frankhermes另一个答案已经解释过,所以我会解释给下面的示例访问的子显示对象另一个(而且可能更好)的方法:
CherryPie.as:
package display
{
import flash.display.MovieClip;
public class CherryPie extends MovieClip
{
private var _cherry:MovieClip;
public function get cherry():MovieClip
{
return _cherry;
}// end function
public function CherryPie()
{
_cherry = cherryMC;
}// end function
}// end class
}// end package
Main.as:
package
{
import flash.display.Sprite;
import flash.events.Event;
public class Main extends Sprite
{
public function Main():void
{
init();
}// end function
private function init():void
{
var cherryPie:CherryPie = new CherryPie();
cherryPie.x = 100;
cherryPie.y = 100;
cherryPie.cherry.gotoAndStop(2);
addChild(cherryPie);
}// end function
}// end class
}// end package
通过为cherryPie_mc
影片剪辑创建一个基类,你可以创建一个名为cherry
财产,在启动中的C cherry
子显示对象分配给它姑娘。这样你就可以直接访问类的cherry
子显示对象:
cherryPie.cherry.gotoAndStop(2);
,而不是:
cherryPie.getChildByName("cherryMC").gotoAndStop(2);
您可以设置CherryPie
类作为cherryPie_mc
影片剪辑的基类,如下所示:
注意:符号属性中的“名称”应为“cherryPie_mc”
也为那些想知道为什么我没有设置cherry
作为公共财产
public var cherry:MovieClip;
,而是使用一个getter方法来访问私有财产
private var _cherry:MovieClip;
public function get cherry():MovieClip
{
return _cherry;
}// end function
是让樱桃对象读 - 只有通过省略setter方法才能完成。我将它设为只读的原因是为了避免类似以下内容:
cherryPie.cherry = new FakeCherry();
你有点飞过我的头。我无法真正理解这一切,特别是因为我不想使用包,所以我不知道如何将其转换为正常的帧内AS。你能提供一个没有包的解决方案吗? – Anonymous 2011-04-11 19:59:51
我个人建议不要使用时间轴,但即使您这样做,也并不意味着您也不能使用自己的用户定义类。只需在你的源代码根目录下创建一个文件夹(你的情况可能在包含你的“fla”和“swf”文件的文件夹中),然后在你的“display”文件夹中创建一个名为“CherryPie”的“as”文件,将CherryPie类复制并粘贴到该文件中。然后更改“cherryPie_mc”动画片段的符号属性,使其与匹配答案中的屏幕截图相匹配。 – Taurayi 2011-04-12 11:39:06