【问题标题】:How do you get Haxe to play sound files when compiling to Flash 8?编译到 Flash 8 时如何让 Haxe 播放声音文件?
【发布时间】:2010-01-20 07:47:56
【问题描述】:

我无法让 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);
    }
}

【问题讨论】:

    标签: flash audio haxe


    【解决方案1】:

    我傻了!

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

    我所要做的就是更改以下代码:

    slides = new Array<MovieClip> ();
    

    到:

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

    以便正确创建音频数组。


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

    所以,既然您可以看到自己面临的问题,那么在生成异常时看看 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 虚拟机选择忽略错误并正常继续。这是否意味着甚至产生了异常?也许吧,但是,就像大多数看不见的害虫一样,你需要抓住一只来证明它的存在。

    【讨论】:

      猜你喜欢
      • 2013-02-28
      • 1970-01-01
      • 2014-05-09
      • 2010-09-12
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      • 2013-12-03
      • 1970-01-01
      相关资源
      最近更新 更多