Frage

Ich bin ein paar Probleme mit immer Haxe 8 Audio-Dateien in Flash zu spielen.

An der Spitze meiner hx-Datei, die ich habe:

import flash.MovieClip;
import flash.Sound;

und innerhalb der Klasse selbst, ich vorzuladen eine Menge von Bilddateien zusammen mit den Namen der Audiodateien.

Die Idee ist, eine Diashow mit Audio-Inhalten zu tun. Im Grunde genommen die erste Folie angezeigt werden und die Audio damit verbundenen spielen.

Dann, wenn das Audio beendet ist, fahren Sie mit der nächsten Folie und im nächsten Audiodatei. Ich habe die Dias in die und aus in Ordnung Fading, aber wenn ich Sound hinzuzufügen versucht, es kommt nichts heraus die Lautsprecher.

Der folgende Code ist, was ich tue -. Die Audiodatei mit Audios assoziiert [0] nie beginnt zu spielen und ich bin ratlos, warum

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);
    }
}
War es hilfreich?

Lösung

Dumme mich!

Es stellt sich heraus, dass ich nur vergessen, das Array zu verteilen, bevor Werte auf, um es schieben. Warum der Laufzeit können Sie das tun, ohne einen Fehler eine andere Frage ist.

Alles, was ich hatte, war, den Code ändern aus:

slides = new Array<MovieClip> ();

zu:

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

, so dass das Audio-Array korrekt erstellt.


In Bezug auf, warum das Schieben zu einem nicht vorhandenen Array nicht von der Laufzeit erwischt hat, dann ist es ein interessanter Schnipsel in der Professional haXe und Neko Buch (die heute und sieht nur angekommen, wie es geht um meine Investition zurück sehr schnell, weshalb ich nichts dagegen haben, geben es ist ein schamloser Stecker), die es, so ziemlich genau die Situation, die ich gestoßen erklärt:

  

So, dass jetzt können Sie sehen, was Sie gegen, werfen Sie einen Blick auf beide Neko und Flash-wenn eine Ausnahme zu erzeugen:

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

Compile die vorhergehende Klasse sowohl für Neko und Blitz, und dann laufen sie beide. Wenn er gestartet wird, sollte der Flash-Player einen leeren Bildschirm anzuzeigen, während die Anwendung Neko wird den folgenden Text erzeugen:

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

     

Dies ist eine abgefangene Ausnahme, das heißt, es ist eine Ausnahme, dass Sie nicht gefangen haben und behandelt in Ihrem Code. Das Problem mit der vorherigen Klasse ist, dass das Array t nicht, bevor die Methode Push instanziiert wurde genannt wurde, so weit, wie die virtuelle Maschine betrifft, so gibt es keine Methode Push verfügbar genannt wird.

     

Nun, die Tatsache der Angelegenheit ist, würde die Flash-virtuelle Maschine die gleiche Wand geschlagen haben, dass die Neko virtuelle Maschine anzutreffen, mit der Ausnahme, dass die Flash-virtuelle Maschine entschied sich für die Fehler und normal weiter zu ignorieren. Bedeutet dies die Ausnahme wurde auch erzeugt? Mag sein, aber, wie die meisten unsichtbar Schädlinge, müssen Sie ein fangen zu beweisen, dass es existiert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top