【问题标题】:Flash Action Script 3 rotate buttonFlash Action Script 3 旋转按钮
【发布时间】:2011-11-04 06:47:41
【问题描述】:

谁能告诉我这段代码有什么问题?我正在尝试旋转动作脚本 3 中的按钮,但我不断收到错误消息:

ArgumentError:错误 #2025:提供的 DisplayObject 必须是子对象 来电者的。在 flash.display::DisplayObjectContainer/removeChild() 在 分配器_app_fla::MainTimeline/NewChartOptionsReturn()[distributor_app_fla.MainTimeline::frame1:218] 在 distribution_app_fla::MainTimeline/ClickNewChartOptions()[distributor_app_fla.MainTimeline::frame1:101]

我已经用谷歌搜索了错误,我读到的所有内容都告诉我删除孩子,然后将其重新添加到框架中,但它继续在同一位置中断。

代码:

//defined

var btnNewChartOptions:NewChartOptions = new NewChartOptions();

btnNewChartOptions.y = 279;

btnNewChartOptions.x = 439;

//created

function NewChartDown():String

{

btnNewChartOptions.addEventListener(MouseEvent.CLICK, ClickNewChartOptions);

    btnNewChartOptions.alpha = 0;

addChild(btnNewChartOptions);

var NewChartOptionsTween:Tween = new Tween(btnNewChartOptions, "alpha", Strong.easeOut, 0, 1, 1, true);

return "NewChartSelected";

}

//actual code on button

function NewChartOptionsDown():String

{
rightGrayOut.alpha = 0;

addChild(rightGrayOut);

var grayOutTween:Tween = new Tween(rightGrayOut, "alpha", Strong.easeOut, 0, 1, 1, true);

var rotateTween:Tween = new Tween(btnNewChartOptions, "rotation", Strong.easeOut, 0, 180, 1, true);



return "NewChartOptions";

}

感谢任何帮助!

【问题讨论】:

  • 要修复您的问题,请尝试将 `removeChild(btnNewChartOptions);` 替换为 if(btnNewChartOptions.parent == this) removeChild(btnNewChartOptions);。但是我认为你的解决方法是错误的开始。
  • @Taurayinope 仍然是相同的运行时错误。至于把它放在错误的地方,那是很可能的,因为我对 as3 几乎是全新的。我试图让按钮在点击时用补间旋转
  • 我还能把它放在哪里?如果你愿意,我可以复制完整的代码,但它看起来像评论中的一团糟
  • 只需编辑您的问题并将其发布在底部,而不是放在评论中。
  • 这个评论区正上方是一个链接“编辑”点击它。

标签: actionscript-3 button rotation


【解决方案1】:

没有必要删除和重新添加对象,因为它要么存在并且可用于方法或不可用,这意味着如果它可用于删除方法,那么它也可用于寻址和操作。这听起来很像范围/可见性问题。

此代码位于时间轴上的第 1 帧,这意味着它应该能够处理直接在舞台上的任何内容或分配给在函数运行时处于同一范围内的变量的任何内容。 (如果这是 AS2,则在 _root 范围内,如第 1 帧中的方法)

btnNewChartOptions 是否在另一个 DisplayObject 中,就像你用来按住所有按钮或其他东西的精灵,而不是直接坐在舞台上?也许您可以描述您尝试解决的对象层次结构以及按钮如何附加到舞台(例如,在运行时实例化和附加或放置在关键帧中的舞台上)。

您能否提供在尝试添加和删除修复之前引发的错误?

【讨论】:

  • 错误是完全相同的,并且对于它们都是在启动时以编程方式添加的对象。我认为问题是在单击另一个按钮之前不会添加该按钮。 iv 尝试以完全相同的方式补间的其他所有内容都运行良好
  • 函数 ClickNewChartOptions(event:MouseEvent):void { if(currentPosition == "NewChartOptions") currentPosition = NewChartOptionsDown();否则 currentPosition = NewChartOptionsReturn(); }
  • 你能粘贴代码来实例化你想要处理的按钮吗?
  • 以及将 ClickNewChartOptions 处理程序注册到它所附加的任何内容的代码。
  • function NewChartDown():String { btnNewChartOptions.addEventListener(MouseEvent.CLICK, ClickNewChartOptions); btnNewChartOptions.alpha = 0; addChild(btnNewChartOptions); var NewChartOptionsTween:Tween = new Tween(btnNewChartOptions, "alpha", Strong.easeOut, 0, 1, 1, true);返回“NewChartSelected”; }
【解决方案2】:

如果在我看来,该对象尚未添加到显示列表中。

// replace the following lines
removeChild(btnNewChartOptions);
addChild(btnNewChartOptions);

// with 
if( !this.contains( btnNewChartOptions ) ){
  return "";
}

[编辑]
你的代码。

//var created
  var btnNewChartOptions:NewChartOptions = new NewChartOptions();
  btnNewChartOptions.y = 279;
  btnNewChartOptions.x = 439;
//button code clicked that creates button
  function NewChartDown():String {
    btnNewChartOptions.addEventListener(MouseEvent.CLICK, ClickNewChartOptions);
    btnNewChartOptions.alpha = 0;
    addChild(btnNewChartOptions);
    var NewChartOptionsTween:Tween = new Tween(btnNewChartOptions, "alpha", Strong.easeOut, 0, 1, 1, true);
    return "NewChartSelected";
  }




//function for button
  function NewChartOptionsDown():String {
    rightGrayOut.alpha = 0;
    addChild(rightGrayOut);
    var grayOutTween:Tween = new Tween(rightGrayOut, "alpha", Strong.easeOut, 0, 1, 1, true);
    var rotateTween:Tween = new Tween(btnNewChartOptions, "rotation", Strong.easeOut, 0, 180, 1, true);
    return "NewChartOptions";
  }


在您提供的代码中,您仅在 NewChartDown 函数中执行 addChild(btnNewChartOptions);

所以这告诉我 NewChartOptionsDown 不能被调用,直到 NewChartDown 被首先调用。因为从未添加过 btnNewChartOptions。
您可以做的是将addChild(btnNewChartOptions); 移到函数之外。

//var created
  var btnNewChartOptions:NewChartOptions = new NewChartOptions();
  btnNewChartOptions.y = 279;
  btnNewChartOptions.x = 439;
  addChild(btnNewChartOptions);

【讨论】:

  • 我很确定它已添加到显示列表中,因为当我运行应用程序时,按钮会显示,但点击时会出现错误
  • 好吧,否则您的错误状态。请尝试提供的代码。或发布更多与该问题相关的代码。
  • 我确实试过它给出了同样的错误。你想要哪一部分代码?我发布了上面创建按钮的代码,而唯一提到该按钮的地方是它的定义
  • 不幸的是它没有工作。当我将它添加到调用它的函数之外时,它仍然抛出同样的错误
  • 哦,等一下,按钮和舞台上有代码吗?从按钮上取下代码并将其移至舞台。你这样做的方式超出了范围,它永远不会存在于按钮上。
猜你喜欢
  • 2014-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-17
  • 1970-01-01
  • 2012-10-21
相关资源
最近更新 更多