1

我正在创建一个带有按钮的测验,而且我是 ActionScript 3.0 的新手,但对 2.0 非常熟悉。

我在名为 NextQuestion 的 MC 中有一个变量。当它到达某个帧时,它会变为 1,然后又变回 0。

在主时间线上,当 NextQuestion == 1 时,它应该是 NextFrame();。我无法让它工作,但这是我遇到的最后一件事。

这是我的主要代码,有 4 个按钮,3 个错误,1 个正确。反馈 MC 播放动画,完成后将 VAR NextQuestion 设置为 1,这应该使主时间线前进到 NextFrame。

stop();

right.addEventListener(MouseEvent.CLICK, rightClick1);
wrong1.addEventListener(MouseEvent.CLICK, wrongClick1);
wrong2.addEventListener(MouseEvent.CLICK, wrongClick1);
wrong3.addEventListener(MouseEvent.CLICK, wrongClick1);
feedback1.addEventListener(Event.ENTER_FRAME, answerRight1);

function answerRight1()
{
    if (feedback1.NextQuestion == 1)
{
    trace(feedback1.NextQuestion);
    nextFrame();
}
else
{
    trace("do nothing");
}
 }

function rightClick1(ev:MouseEvent):void
{
trace(feedback1.NextQuestion);
feedback1.gotoAndPlay("right1");
}

function wrongClick1(ev:MouseEvent):void
{
trace("wrong");
feedback1.gotoAndPlay("wrong");
}

任何帮助是极大的赞赏!:)

4

1 回答 1

0

AS3 中的 nextFrame() 方法不会循环通过你的movieClips,它只是将影片剪辑设置为下一帧,前提是有下一帧,否则它什么也不做。

您可能希望将 nextFrame() 重写为:

if (totalFrames == currentFrame)
{
    gotoAndStop(1); // or gotoAndPlay(1) if you need
}
else
{
    nextFrame();
}

这就是为什么电影剪辑可能不会从头开始的原因。

另一件看起来很奇怪的事情是您需要一个 FRAME_ENTER 事件来检查答案是否正确。输出日志中一定有很多垃圾邮件。我建议您为此完全放弃 ENTER_FRAME 事件侦听器,并使用 CLICKED 事件完成所有操作并从 feedback1 对象调度事件。

据我所知,当您单击按钮时会播放影片剪辑,并且当动画结束时,您想要前进到下一帧或什么也不做。如果是这样,在 feedback1 对象上为标签“right1”在动画末尾添加以下行:

dispatchEvent(new Event("right"));

而不是该行feedback1.addEventListener(Event.ENTER_FRAME, answerRight1);

feedback1.addEventListener("right", answerRight1);

这样您就不需要检查每一帧的答案,也不需要检查答案是否正确,因为当dispatchEvent(new Event("right"));触发时 - 它总是正确的。

希望我没有误解你的问题:)

于 2013-08-27T01:48:26.777 回答