Flash播放头走向错误的场景,没有可解释的原因

时间:2015-04-09 13:34:09

标签: actionscript-3 flash scene

即使使用像小场景导航这样简单的东西,Flash也会不时发生异常。问题是,而不是去#Pit; PitOne"在第一个场景上指示的场景,Flash播放头奇怪地到达我们的" LevelOne"现场。这让我很困惑,因为我无法弄清楚什么可能改变Flash播放头的路径。

在第一个场景的最后一行,我直接告诉Flash去我们的" PitOne"场景,这意味着即使之前有任何其他导航方法,也只能执行最后一个。

除此之外,在第一个场景上没有添加eventListeners,除了一些鼠标点击事件。然而,由于在导出Flash电影之后立即将我们带到可怕的" LevelOne"场景,我们可以假设这些eventListeners与我们的问题无关。

我在每个场景上设置了一个跟踪方法来跟踪Flash播放头的遭遇。根据跟踪输出,Flash只进入第一个场景和" LevelOne"场景,所以我们直接从第一个场景转到" LevelOne"现场。这意味着如果我出现问题,那就是第一个场景。 但是,在我刚刚向您描述的场景中,有什么可能改变我们的场景导航路径?如果您对可能的内容有任何想法,请告诉我!谢谢你的时间。

其他信息: 也许如果我告诉你,每当我回到第一个场景时,场景导航代码似乎开始工作并开始工作,这可能会有所帮助,因为这样我们就会被发送到" PitOne"场景。

我也意识到,如果你像我一样,你会想要看到真正的代码。这是第一个场景的重要代码(我们知道问题出现在第一个场景上,因为这个场景将我们直接发送到" LevelOne"场景):

import flash.events.MouseEvent;
import flash.geom.Point;
import flash.events.Event;
import flash.display.MovieClip;
import flash.display.Scene;
import flash.text.TextFormat;

stop();


playNewBtn.addEventListener(MouseEvent.CLICK,playNew);
function playNew(e:MouseEvent){
    playNewBtn.removeEventListener(MouseEvent.CLICK,playNew);
    settingsBtn.removeEventListener(MouseEvent.CLICK,gotoSettings);
    creditsBtn.removeEventListener(MouseEvent.CLICK,gotoCredits);
    gotoAndPlay(1,"LevelOne");
}

settingsBtn.addEventListener(MouseEvent.CLICK,gotoSettings);
function gotoSettings(e:MouseEvent){
    playNewBtn.removeEventListener(MouseEvent.CLICK,playNew);
    settingsBtn.removeEventListener(MouseEvent.CLICK,gotoSettings);
    creditsBtn.removeEventListener(MouseEvent.CLICK,gotoCredits);
    gotoAndPlay(1,"Settings");
}

creditsBtn.addEventListener(MouseEvent.CLICK,gotoCredits);
function gotoCredits(e:MouseEvent){
    playNewBtn.removeEventListener(MouseEvent.CLICK,playNew);
    settingsBtn.removeEventListener(MouseEvent.CLICK,gotoSettings);
    creditsBtn.removeEventListener(MouseEvent.CLICK,gotoCredits);
    gotoAndPlay(1,"Credits");
}


gotoAndPlay(1,"PitOne");

2 个答案:

答案 0 :(得分:2)

这不是一个答案,但将所有这些扼杀到评论中是单调乏味且不易阅读的。

也许你的其中一个场景名称中有拼写错误?

尝试运行此代码以获取所有场景的列表:

import flash.display.Scene;

for (var i:uint = 0; i < scenes.length; i++) {
    var scene:Scene = scenes[i];
    trace("scene " + scene.name + ": " + scene.numFrames + " frames");
}

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/MovieClip.html#scenes


创建字符串的方式似乎无效:

trace("entered "settings"");

应该是

trace("entered settings");

如果你想在输出中加入“你必须通过\来逃避它们”,或者只是使用'而不是。

在您的代码中,“before settings标记字符串的结尾,而不是字符串的字符。


如果您有“数千行”,可能是因为重复代码的数量。

function disableButtons():void
{
    playNewBtn.removeEventListener(MouseEvent.CLICK,playNew);
    settingsBtn.removeEventListener(MouseEvent.CLICK,gotoSettings);
    creditsBtn.removeEventListener(MouseEvent.CLICK,gotoCredits);
}

答案 1 :(得分:1)

看起来你在加载场景之前抛出命令。无论你尝试什么,(通过添加一个监听器来检查是否加载了场景),flash播放器将停留在场景1帧1,直到场景&#34; pitOne&#34;已加载。 这就是为什么一个好的做法是创建一个预加载器以确保你所需要的东西正确加载,然后再将命令扔到时间轴中的某个地方。您可以在此处获得简单且解释良好的示例:http://www.republicofcode.com/tutorials/flash/as3preloader/。 另一个解决方案是设置你的场景&#34; pitOne&#34;导出电影时的第一个位置