1

我无法让 Haxe 在 Flash 8 中播放音频文件。

在我的 hx 文件的顶部,我有:

import flash.MovieClip;
import flash.Sound;

而且,在类本身中,我预加载了许多图像文件以及音频文件的名称。

这个想法是用音频内容制作幻灯片。基本上,显示第一张幻灯片并播放与之相关的音频。

然后,一旦该音频完成,请转到下一张幻灯片和下一个音频文件。我的幻灯片可以淡入淡出,但是当我尝试添加声音时,扬声器没有任何声音。

以下代码是我正在做的事情 - 与 audios[0] 关联的声音文件永远不会开始播放,我不知道为什么。

class Whatever {
    static var master : MovieClip;
    static var slides : Array<MovieClip>;
    static var audios : Array<String>;
    static var sound  : Sound;

    function new () {}

    static function main () {
        master = flash.Lib.current;
        slides = new Array<MovieClip> ();
        sound = new Sound (null);

        var app  : Whatever = new Whatever ();
        var num  : String;
        var j    : Int;
        var clip : MovieClip;

        // There are 12 pictures in this test, image[001-012].jpg.
        // Each has an associated audioNNN.mp3 file.

        for (j in 1...13) {
            // Right-justify, zero fill.

            num = "" + j;
            if (j <  10) num = "0" + num;
            if (j < 100) num = "0" + num;

            // Load each image, hiding all but the first.

            clip = master.createEmptyMovieClip ("clip_" + num, master.getNextHighestDepth());
            clip.loadMovie ("image" + num + ".jpg");
            if (j > 1) clip._alpha = 0;
            slides.push (clip);

            // Make another list of the audio files.

            audios.push ("audio" + num + ".mp3");
        }

        // Start the first audio file.

        sound.loadSound (audios[0], true);
    }
}
4

1 回答 1

2

傻我!

事实证明,我只是忘记在将值推送到数组之前分配数组。为什么运行时允许您在没有错误的情况下执行此操作是一个单独的问题。

我所要做的就是将代码更改为:

slides = new Array<MovieClip> ();

到:

slides = new Array<MovieClip> ();
audios = new Array<String> ();

以便正确创建音频数组。


关于为什么推送到不存在的数组没有被运行时捕获,Professional haXe and Neko book 中有一个有趣的片段(今天才到,看起来它会很快收回我的投资这就是为什么我不介意给它一个无耻的插件)来解释它,几乎正是我遇到的情况:

因此,既然您可以看到您遇到的问题,请在生成异常时查看 Neko 和 Flash:

class UncaughtException {
    public static function main() {
        var t : Array <String> ;
        t.push("me");
    }
}

为 Neko 和 Flash 编译前面的类,然后运行它们。运行时,Flash 播放器应显示空白屏幕,而 Neko 应用程序将生成以下文本:

Called from  line 1
Called from UncaughtException.hx line 6
Uncaught exception - Invalid field access : push

这是一个未捕获的异常,这意味着它是您没有在代码中捕获和处理的异常。上一个类的问题是在调用push方法之前没有实例化Array t,所以就虚拟机而言,没有可用的push方法。

现在,事实是,Flash 虚拟机会遇到 Neko 虚拟机遇到的同一堵墙,只是 Flash 虚拟机选择忽略错误并正常继续。这是否意味着甚至产生了异常?也许吧,但是,就像大多数看不见的害虫一样,你需要抓住一只来证明它的存在。

于 2010-01-21T04:02:30.357 回答