我收到错误:
TypeError: Error #1010: A term is undefined and has no properties.
它所指的术语是一个创建的动画片段。创建代码如下:
var Cursor = new CursorImg();
GameMenu.addChild(Cursor);
以下是访问它的地方:
GameMenu.Cursor.gotoAndStop(1);
我不知道这有什么问题,但是当这被触发时,我得到了那个错误。我将它与其他有效的代码进行了比较,除了movieclip及其父代的命名外,它完全相同。
有谁知道造成这种情况的原因是什么?
答案 0 :(得分:0)
很难知道发布的信息数量有限,但看起来Cursor不是GameMenu的财产,只是一个孩子。
试试这个:
var cursor = new CursorImg();
gameMenu.addChild(cursor);
cursor.name = "cursor";
和
gameMenu.getChildByName("cursor").gotoAndStop(1);
这不是实现你想要的最好的方法,但其他方法取决于我不知道的代码结构。
另请注意,变量名称的AS3编码约定是使用camelCase(第一个字首字母小写,第一个字母的下一个单词大写)。
答案 1 :(得分:0)
您已经按cursor
定义了变量new CursorImg()
,然后将其添加到gameMenu
并尝试访问gameMenu.cursor
但实际上该电影中没有对象{{ 1}}名称为gameMenu
。但是,您只需使用您定义的变量cursor
访问附加的影片。
cursor
在AS3中,您不能像我们在AS2中所做的那样使用它的名称来访问动态添加的动画片段。您只能借助cursor.gotoAndStop(1);
类的getChildByName()
功能来访问电影。因此,您也可以访问像
MovieClip
然后在var cursor = new CursorImg();
gameMenu.addChild(cursor);
cursor.name = "cursor";
中的任意位置访问
class
仅供参考:添加到舞台的任何内容通常打包在var cursor:MovieClip = gameMenu.getChildByName("cursor") as MovieClip;
cursor.gotoAndStop(1);
下,因此我们需要对其进行类型转换才能获得正确的类型。
使用 camelCase 样式来命名DisplayObject
名称可能更好,因为标准方式是 camelCase 用于vaiables,而且只用于Class的每个单词的第一个字母应 CAPITAL
答案 2 :(得分:0)
鉴于你的代码片段,Cursor
变量是函数本地的,因为它在某个函数中定义而不是在任何函数之外定义,这样它就是类的属性。因此,将var cursor:MovieClip;
与cursor=new CursorImg();
分开并将前者置于任何函数之外,然后再次测试。我想你需要经常引用那个'光标',这样getChildByName
调用会以某种方式降低性能。