Глупый я!
Оказывается, я просто забыл выделить массив, прежде чем помещать в него значения.Почему среда выполнения позволяет вам делать это без ошибок - это отдельный вопрос.
Все, что мне нужно было сделать, это изменить код с:
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 решила игнорировать ошибку и продолжить работу в обычном режиме.Означает ли это, что исключение было даже сгенерировано?Возможно, но, как и большинство невидимых вредителей, вам нужно поймать одного, чтобы доказать, что он существует.