Как заставить Haxe проигрывать звуковые файлы при компиляции в Flash 8? - PullRequest
1 голос
/ 20 января 2010

У меня возникли проблемы с воспроизведением Haxe аудиофайлов во Flash 8.

В верхней части моего hx-файла у меня есть:

import flash.MovieClip;
import flash.Sound;

и в классеСам я предварительно загружаю множество файлов изображений вместе с именами аудиофайлов.

Идея состоит в том, чтобы сделать слайд-шоу с аудиоконтентом.По сути, отобразите первый слайд и воспроизведите звук, связанный с ним.

Затем, как только этот звук закончится, перейдите к следующему слайду и следующему аудиофайлу.У меня есть слайды, постепенно исчезающие, но когда я пытался добавить звук, из динамиков ничего не выходило.

Следующий код - то, что я делаю - звуковой файл, связанный с аудио [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);
    }
}

1 Ответ

2 голосов
/ 21 января 2010

Глупый я!

Оказывается, я просто забыл выделить массив, прежде чем помещать в него значения.Почему среда выполнения позволяет вам делать это без ошибок - это отдельный вопрос.

Все, что мне нужно было сделать, это изменить код с:

slides = new Array<MovieClip> ();

на:

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

, чтобы звуковой массив был создан правильно.


Что касается того, почему загрузка в несуществующий массив не была обнаружена во время выполнения, в haXe Professional есть интересный фрагменти книга Neko (которая поступила только сегодня и выглядит так, как будто она быстро вернет мои инвестиции очень , поэтому я не против придать ей бессовестный штекер), в которой это объясняется, почти точноситуация, с которой я столкнулся:

Итак, теперь, когда вы можете увидеть, с чем вы столкнулись, посмотрите на Neko и Flash при создании исключения:

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

Скомпилируйте предыдущий класс для Neko и Flash, а затем запустите их оба.При запуске проигрыватель Flash Player должен отображать пустой экран, а приложение Neko сгенерирует следующий текст: Called from line 1 Called from UncaughtException.hx line 6 Uncaught exception - Invalid field access : push

Это необученное исключение, то есть исключение, которое вы не поймали и не обработалис в вашем коде.Проблема с предыдущим классом состоит в том, что до того, как был вызван метод push, экземпляр Array t не был создан, поэтому для виртуальной машины не существует метода с именем push.

Теперь фактдело в том, что виртуальная машина Flash столкнулась бы с той же стеной, с которой столкнулась виртуальная машина Neko, за исключением того, что виртуальная машина Flash решила игнорировать ошибку и продолжить работу в обычном режиме.Означает ли это, что исключение было даже сгенерировано?Возможно, но, как и большинство невидимых вредителей, вам нужно поймать одного, чтобы доказать, что он существует.

...