2010-01-20 7 views
1

Je vais avoir du mal à obtenir un peu Haxe pour lire des fichiers audio dans Flash 8.Comment obtenez-vous Haxe pour lire des fichiers audio lors de la compilation vers Flash 8?

Au sommet de mon dossier hx, j'ai:

import flash.MovieClip; 
import flash.Sound; 

et, au sein de la classe elle-même, je précharger un beaucoup de fichiers image avec les noms des fichiers audio.

L'idée est de faire un diaporama avec du contenu audio. Fondamentalement, affichez la première diapositive et jouez l'audio associé.

Ensuite, une fois l'audio terminé, passez à la diapositive suivante et au fichier audio suivant. J'ai les diapositives se fanant dans et hors ok mais quand j'ai essayé d'ajouter du son, rien ne sort les haut-parleurs.

Le code suivant est ce que je suis en train de faire: le fichier son associé à audios [0] ne commence jamais à jouer et je ne sais pas pourquoi.

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); 
    } 
} 

Répondre

2

Silly moi!

Il s'avère que j'ai juste oublié d'allouer le tableau avant de lui appliquer des valeurs. Pourquoi l'exécution vous permet de le faire sans erreur est une question distincte.

Tout ce que je devais faire était de changer le code de:

slides = new Array<MovieClip>(); 

à:

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

sorte que le réseau audio est créé correctement.


En ce qui concerne la raison pour laquelle la poussée à un tableau non existant ne pas se laisser prendre par l'exécution, il y a un extrait intéressant dans le Professional haXe and Neko livre (qui ne est arrivé aujourd'hui et il semblerait qu'il va revenir mon investissement très rapidement, ce qui est la raison pour laquelle je ne me dérange pas de donner un bouchon sans vergogne) qui explique, à peu près exactement la situation que je rencontre:

Alors, maintenant que vous pouvez voir ce que vous êtes contre, prendre un coup d'œil sur Neko et Flash lors de la génération d'une exception:

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

Compile la classe précédente pour les Neko et Flash, puis les exécuter à la fois. Lorsqu'il est exécuté, le lecteur Flash doit afficher un écran vide, tandis que l'application Neko génère le texte suivant:

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

Il s'agit d'une exception non interceptée, ce qui signifie qu'il s'agit d'une exception que vous n'avez pas détectée et traitée dans votre code. . Le problème avec la classe précédente est que le tableau t n'a pas été instancié avant que la méthode push n'ait été appelée, donc en ce qui concerne la machine virtuelle, il n'y a pas de méthode appelée push disponible. Maintenant, le fait est que la machine virtuelle Flash aurait atteint le même mur que la machine virtuelle Neko, sauf que la machine virtuelle Flash a choisi d'ignorer l'erreur et de continuer comme d'habitude. Est-ce que cela signifie que l'exception a même été générée?Peut-être, mais, comme la plupart des ravageurs invisibles, vous devrez en attraper un pour prouver qu'il existe.