Flash AS3 - ошибка SoundChannel #1009

Я немного новичок во Flash, поэтому извиняюсь, если это простая проблема или исправление. В любом случае у меня проблемы с некоторыми функциями. Я заметил, что получаю ошибку 1009 только на функциях, которые пытаются остановить звуковой канал. Вот часть кода:

Это один из первых кадров первой сцены, просто настройка моих каналов. Все мои звуки здесь тоже сделаны, но я не думаю, что это проблема.

import flash.media.Sound;
import flash.media.SoundChannel;

var musicChannel:SoundChannel = new SoundChannel();
var speechChannel:SoundChannel = new SoundChannel();
var sfxChannel:SoundChannel = new SoundChannel();

И вот пример одной из кнопок, которая вызывает ошибку 1009:

function goHome(e:MouseEvent):void {
speechChannel.stop();
sfxChannel.stop();
musicChannel.stop();
gotoAndPlay(2, "TitleScreen")
}

home.addEventListener(MouseEvent.CLICK, goHome);

Что меня действительно смущает, так это то, что этот код прекрасно работал прошлой ночью на моем компьютере. Я пошел, чтобы проверить мой.swf на компьютерах в моем колледже, и моя анимация застыла, поэтому я зарегистрировал Flash, и это то, что я получил.

Я также получаю ту же ошибку 1009 на некоторых вещах TweenMax. И да, я импортировал все необходимое, и все файлы, необходимые для запуска этих функций, находятся в корневом каталоге.fla файла. Я знаю это, потому что, как и с другой ошибкой, эта штука отлично работала на моем компьютере дома. Я использую тот же файл.fla и файл кода, который я сохранил на своем компьютере, и у меня есть папка 'com' и swc-файлы 'greenstock' в той же директории, что и мой.fla, точно так же, как на моем ПК, но я ' Я все еще вижу 1009 с этим:

import com.greensock.TweenLite;
import com.greensock.TweenMax;

TweenMax.to(musicChannel, 2, {volume:0});

Опять же, эта строка ссылается на звуковой канал, так что я на 99% уверен, что это корень этих проблем. Я могу поменять 'musicChannel' в этом куске кода на 'Music1' (звук, объявленный в первом кадре с каналами), и он прекрасно останавливает музыку, но всякий раз, когда я пытаюсь остановить звуковые каналы, он выходит из-под контроля.

Еще раз извините, если это действительно просто исправить, но я совершенно сбит с толку, потому что прошлой ночью все работало нормально. Flash Player может быть устаревшим, но это Adobe Flash Player 11, поэтому я не знаю, будет ли это проблемой. Сейчас я учусь в колледже, поэтому не знаю, какая у меня дома версия.

Спасибо за ваше время.

1 ответ

Решение

SoundCahnnel может быть нулевым, и когда они есть, вы не можете попытаться изменить их собственность. Простой способ справиться с этим - проверить, являются ли они нулевыми или нет:

if(musicChannel)
{
    TweenMax.to(musicChannel, 2, {volume:0});
}

Также объекты SoundChannel генерируются только при вызове метода воспроизведения объекта Sound, поэтому нет необходимости их создавать:

var musicChannel:SoundChannel = new SoundChannel();//irrelevant piece of code
var musicChannel:SoundChannel;//correct
Другие вопросы по тегам