2010-01-20 19 views
1

我有一些麻煩HAXE在Flash 8如何在編譯到Flash 8時讓Haxe播放聲音文件?

播放音頻文件在我的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); 
    } 
} 

回答

2

傻逼我!

事實證明,我只是忘記分配數組之前推值。爲什麼運行時允許你這樣做沒有錯誤是一個單獨的問題。

我所要做的就是將代碼從改變:

slides = new Array<MovieClip>(); 

到:

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

從而正確創建音頻陣列。


至於爲什麼推到一個不存在的數組沒有運行時被抓住,還有在Professional haXe and Neko書的有趣片段(今天只來了,看起來這將返回我的投資非常快,這就是爲什麼我不介意給它一個無恥的插頭),解釋它,幾乎完全的情況我遇到:

所以,現在你可以看到你在做什麼反對,採取在產生異常時看Neko和Flash:

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

編譯前面的類都ネ和Flash,然後運行他們兩個。運行時,Flash播放器應該顯示一個空白屏幕,而Neko應用程序將生成以下文本:

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

這是一個未捕獲的異常,這意味着它是一個例外,您沒有在代碼中捕獲和處理。前面的類的問題是,在調用方法推送之前,數組t未被實例化,因此就虛擬機而言,沒有稱爲可用的方法。

現在,事實是,Flash虛擬機會碰到Neko虛擬機遇到的同一堵牆,除了Flash虛擬機選擇忽略錯誤並繼續正常運行。這是否意味着甚至產生了異常?也許吧,但是,像大多數隱形蟲一樣,你需要抓住一個來證明它存在。