AS3 中的“TypeError:错误 #1010:术语未定义且没有属性”

Posted

技术标签:

【中文标题】AS3 中的“TypeError:错误 #1010:术语未定义且没有属性”【英文标题】:"TypeError: Error #1010: A term is undefined and has no properties" in AS3 【发布时间】:2017-03-19 16:05:18 【问题描述】:

我正在为我们的论文使用 Adob​​e Animate CC 创建一个 android 游戏,每次我测试我的作品时,一开始它运行良好,但是当我进入主游戏时,出现错误:

Error #1010: A term is undefined and has no properties at RECOVER_RECOVER_dmthesis_demo_ver__paggumanarename_Scene14_fla::MainTimeline/frame1()[RECOVER_RECOVER_dmthesis_demo_ver__paggumanarename_Scene14_fla.MainTimeline::frame1:160]

这是我的代码(包括注释代码):

import flash.events.MouseEvent;
import flash.display.MovieClip;
import flash.events.Event;
import flash.display.Stage;
import flash.utils.Timer;


gril.gotoAndStop('a');


var gril:MovieClip = new MovieClip;
var linya:MovieClip = new MovieClip;
var timer:MovieClip = new MovieClip;
var scorer:MovieClip = new MovieClip;
var xDistance:Number 
var yDistance:Number
var fl_SecondsToCountDown:Number = 5;
var fl_CountDownTimerInstance:Timer = new Timer(1000, fl_SecondsToCountDown);
var vx:Number = 5; 
var vy:Number = 5;
var bg:MovieClip = new MovieClip;
var bg2:MovieClip = new MovieClip;
var qnaWin:MovieClip = new MovieClip;
var corekWin:MovieClip = new MovieClip;
var maliWin:MovieClip = new MovieClip;
var gameOverWin:MovieClip = new MovieClip;
//var btnPause:Button = new Button;
//var forward:Button = new Button;


bg.visible = true;
bg2.visible = false;
gril.visible = true;
linya.visible = true;
btnPause.visible = true;
pauseWin.visible = false;
qnaWin.visible = false;
corekWin.visible = false;
maliWin.visible = false;
scorer.visible = false;
timer.visible = false;
forward.visible = true;
gameOverWin.visible = false;


//var rightpressed:Boolean = new Boolean(false);
//var leftPressed:Boolean = new Boolean(false);
//var linkspeed:Number = 10;
//var contactApak: Boolean =false;


/*else if(keyEvent.keyCode == Keyboard.LEFT)
leftpressed = true;
*/


//forward.enabled = true;
forward.addEventListener(MouseEvent.CLICK, myClickReaction); 
// speeds ALONG NYPOTENUSE
function myClickReaction (e:MouseEvent):void   
     vx = mouseX - gril.x;
     vy = mouseY - gril.y; 
     addEventListener(Event.ENTER_FRAME, onEnterFrame); 
  gril.x+=10;
     gril.gotoAndStop('i');

/*stage.addEventListener(MouseEvent.CLICK, keyDownHandler);
function keyDownHandler(event:MouseEvent):void
if(event == Keyboard.RIGHT)
rightpressed = true;
  
*/



function onEnterFrame(event:Event):void  
     //mc increments by 5 until it reaches mouse - mc (ie the distance) 
     gril.x += vx; 
     gril.y += vy; 
     xDistance = Math.abs(mouseX - gril.x); 
     yDistance = Math.abs(mouseY - gril.y); 
     trace (xDistance) 
     if (xDistance == 0 )  
          removeEventListener(Event.ENTER_FRAME, onEnterFrame); 
      

/*forward.addEventListener(MouseEvent.CLICK, lakad);
function lakad(event:MouseEvent):void
if(event.keyCode == Keyboard.RIGHT)
rightpressed = false;
gril.gotoAndStop('a');

*/
/*else if(keyEvent.keyCode == Keyboard.LEFT)
leftpressed = false;
mcgril.gotoAndStop("Stand Left Frame");
*/




/*stage.addEventListener(Event.ENTER_FRAME, gameLoopi);
forward.addEventListener(MouseEvent.CLICK, gameLoopi);
function gameLoopi(e:Event):void
gril.x+=10;
gril.gotoAndStop('i');
*/
/*else if(leftpressed)
linkMC.x-=linkspeed;
linkMC.gotoAndStop("Walk Left Frame);
*/
if(linya.hitTestObject(gril))
  qnaWin.visible = true;

/*if(apak.hitTestPoint(mcgril.x,mcgril.y+15,true))
  contactApak=true;

else
  contactApak=false;
*/

//btnPause.enabled = true;
btnPause.addEventListener(MouseEvent.CLICK, pois);

function pois(event:MouseEvent):void
  stage.frameRate = 0;
  bg.visible = true;
  bg2.visible = false;
  gril.visible = false;
  linya.visible = false;
  btnPause.visible = false;
  pauseWin.visible = true;
  qnaWin.visible = false;
  corekWin.visible = false;
  maliWin.visible = false;
  scorer.visible = false;
  timer.visible = false;
  forward.visible = false;
  gameOverWin.visible = false;



pauseWin.btnResume.addEventListener(MouseEvent.CLICK, gorau);


function gorau(event:MouseEvent):void
  bg.visible = true;
  bg2.visible = false;
  gril.visible = true;
  linya.visible = true;
  btnPause.visible = true;
  pauseWin.visible = false;
  qnaWin.visible = false;
  corekWin.visible = false;
  maliWin.visible = false;
  scorer.visible = false;
  timer.visible = false;
  forward.visible = true;
  gameOverWin.visible = false;



pauseWin.btnQtm.addEventListener(MouseEvent.CLICK, kweet);


function kweet(event:MouseEvent):void
  gotoAndStop(1, "Scene 1");



/*var objectoriginalX:Number;
var objectoriginalY:Number;*/


**corekWin.btnGo.addEventListener(MouseEvent.CLICK, gorabelx);**//this is in the line 160, the main problem


function gorabelx(event:MouseEvent):void
  bg2.visible = true;
  bg.visible = false;
  //mcbackground.room.pinto(scaleY =-1);
  

//timer.timee.text=fl_SecondsToCountDown.toString();
fl_CountDownTimerInstance.start();


fl_CountDownTimerInstance.addEventListener(TimerEvent.TIMER, foo);


function foo(event:TimerEvent):void

  fl_SecondsToCountDown--;
  timer.timee.text=fl_SecondsToCountDown.toString();
  trace(fl_SecondsToCountDown + " seconds");
  if(fl_SecondsToCountDown == 0)
  gameOverWin.visible = true;
  



gameOverWin.btnTry.addEventListener(MouseEvent.CLICK, tryk);


function tryk(event:MouseEvent):void
  bg.visible = true;
  bg2.visible = false;
  gril.visible = true;
  linya.visible = true;
  btnPause.visible = true;
  pauseWin.visible = false;
  qnaWin.visible = false;
  corekWin.visible = false;
  maliWin.visible = false;
  scorer.visible = false;
  timer.visible = false;
  forward.visible = true;
  gameOverWin.visible = false;

哎呀!我的代码太长了。我多次检查我的代码,没有任何问题,我也调试它,仍然出现这种错误。我已经声明了 corekWin(电影剪辑),但是 corekWin 内部的 btnGo(另一个可以点击的电影剪辑)不需要声明它,对吧?因为 corekWin 已经被声明了。

我正在尝试修复该错误,但不幸的是,它失败了。我已经仔细检查过了。你觉得这段代码有什么问题?

【问题讨论】:

您使用的是两个 .fla 文件吗?看来您在 RECOVER_RECOVER_dmthesis_demo_ver__paggumanarename_Scene14_fla 和 OVER_RECOVER_dmthesis_demo_ver__paggumanarename_Scene14_fla 中存在问题由于您使用了很多场景,因此很难弄清楚问题出在哪里。代码在第 1 帧?错误消息说您在场景 14 上遇到问题。我无法弄清楚场景 14 发生了什么以及您在该场景中的代码是什么。要暂停动画,您应该使用 stop() 和 start() 方法,并且无需设置帧率 @ 0 您创建了很多 MC 而不是 addChild 这不清楚和令人困惑@cjoyy27 @tatactic 不。我只使用一个 .fla 文件(这个项目 RECOVER_RECOVER_dmthesis_demo_ver__paggumanarename_Scene14.f‌​la)。我只是从输出中复制,并没有删除 REC 和 OVER 之间的空格(据说是 RECOVER .. 对此感到抱歉)。我正在使用很多场景。我正在使用“测试场景”来确保我创建的代码是否正常工作。即使我测试了整个项目,也会出现同样的错误。 corekWin.btnGo.addEventListener(MouseEvent.CLICK, gorabelx); 这是在第 160 行,主要错误。 @halfer 不客气 :) 【参考方案1】:

关于这一行:

var corekWin:MovieClip = new MovieClip;

你刚刚创建了一个新的空白(empty)MovieClip 对象,引用名称为corekWin,因为你从来没有做过corekWin.addChild(btnGo); 你不能说;

corekWin.btnGo.addEventListener(MouseEvent.CLICK, gorabelx);

失败是因为corekWin 是一个空的new Movieclip,它不包含任何btnGo 对象。

可能的解决方案

如果corekWin 是您的 (ctrl+L) 中的一个影片剪辑,那么您应该给它一个链接 名称(右键单击并转到属性并给出一个链接名称,例如称它为mc_corekWin)。

现在在您的代码中,您可以实例化现有的 MovieClip 而不是创建一个新的空的...:

var corekWin : mc_corekWin = new mc_corekWin();

在调整任何视觉方面之前,通过stage.addChild(corekWin); 将其添加到舞台,然后您可以执行corekWin.visiblecorekWin.alpha 等等。

编辑

如果您的 MC 已经放置在舞台上(在运行时),那么您不需要创建 new Movieclip(甚至是 new mc_corekWin)变量。只需通过您提供的 instance 名称来引用 MC。

要撤消 链接,只需返回 Library 中 MC 的属性,然后取消勾选 “Export for Actionscript”盒子。

要添加 instance 名称,请单击 MC(在舞台上单击,而不是 Library)并打开 Properties 选项卡 (ctrl+F3),然后您' 将看到一个为您的首选名称准备好的部分。您键入的名称(然后按 Enter 进行更新)将在代码中使用。

基本上,如果 MC xyz 已经在舞台上,您不需要 var xyz:MovieClip = new MovieClip;(这将覆盖舞台上的 MC)来通过代码控制它,只需给它一个实例名称,然后使用该名称来在代码中引用 MC。

您可能不需要 grillinya 等变量为 new MovieClip。尝试取消注释它们(使用//),看看它们现在是否变得“不可见”。

【讨论】:

好的。我得到了它。嗯.. corekWin 内部的 btnGo 怎么样?我还会做addChild 的事情吗? 有效!不再出现错误,但我仍然有问题。其他影片剪辑应该被隐藏(例如corekWin.visible = false),但在运行时,它们仍会显示。但是感谢@VC One! “应该隐藏其他影片剪辑”...我添加了更新。另外我怀疑你们的 MC 已经上台了?您制作new MovieClips 令人困惑,但我认为您认为您必须这样做才能控制它们?如果已经在舞台上,那么只需通过 MC 的实例名称在代码中控制(与 linkage 名称不同,实际上您应该禁用链接以便使用 instance 名称) 我之前收到错误 1009,但是当我声明 var xyz:MovieClip = new MovieClip(); 时,该错误 (1009) 消失了,但出现了另一个错误 (1010)。 1010错误是corekWin.btnGo...etc行引起的吗?如果是,corekWin MC 实际上是否包含另一个 MC,其中 btnGo 作为实例名称?你想实例化为new 的 MC 必须有一个链接名称(这现在使它成为一个类),所以一旦你创建了一个 var xyz : someClass = new someClass,你就可以通过 xyz 名称引用它,但其中包含任何其他 MC(它的子) 可以通过它们的实例名称访问。也不需要xyz.addChild(btnGo),因为它已经在 MC 自己的时间线上。您可以通过someMC.addEventListener(MouseEvent.CLICK etc 使用 MC 作为按钮

以上是关于AS3 中的“TypeError:错误 #1010:术语未定义且没有属性”的主要内容,如果未能解决你的问题,请参考以下文章

在AdvanceDataGrid中添加记录时:TypeError:错误#1010:术语未定义且没有属性

在 Flex 中使用 Flash 组件 SWC 文件

Flash 横幅中的 AS3 视差效果阻止 Movieclip 按钮运行

AS3中的void有啥用

如何解决 ActionScript 3 (AS3) 中的关闭问题

在 Flex 3 中将 UIComponent 添加到 Canvas 和 Tree