2017-01-22 3 views
0

Позвольте мне установить сцену, потому что это слишком много кода, чтобы получить возможность отправлять все:Проверка логической переменной в другом классе

У меня есть Main.as, которая устанавливает мои SoundController.as, так что я могу вызвать звуки из любого другого класс (SoundController.as имеет все функции, необходимые для вызова всех моих звуков по мере необходимости)

У меня есть ControlPanel.as, который может получить доступ к этим звукам с помощью docRef.soundControl.laserFire или любого другого имени функции, которое я хочу, и в в этом случае звук LaserFire срабатывает один раз.

Итак, вот мой вопрос. Я хочу, чтобы этот эффект лазерного звука заканчивался, прежде чем вы сможете запустить другой лазер. Таким образом, в SoundController.as я создал следующие фрагменты кода:

private var _laserPlaying:Boolean = false; 

internal function laserFire():void { 
    _sfxChannel = _laser.play(25); 
    _laserPlaying=true; 
    _sfxChannel.addEventListener(Event.SOUND_COMPLETE, laserFinished); 
} 

internal function laserFinished(event:Event):void { 
    _sfxChannel.removeEventListener(Event.SOUND_COMPLETE, laserFinished); 
    _laserPlaying=false; 
} 

public function get laserPlaying():Boolean { 
    return _laserPlaying; 
} 

public function set laserPlaying(value:Boolean):void { 
    _laserPlaying = value; 
} 

Сейчас в моем ControlPanel классе в функции enterFrameHandler я хочу сделать

if (docRef.soundControl.laserPlaying()==false) 

или что-то на этот счет так Я могу проверить, когда звук сделан, и позволить игроку еще раз нажать на спусковой крючок, чтобы запустить лазер. Пока какой-либо вариант, который я пробовал на этом, либо дает мне ошибку (в этом случае 1195; Попытка доступа к недоступному методу laserPlaying через ссылку со статическим типом SoundController), либо он действительно компилируется, но после запуска первого лазерного выстрела он никогда не позволяет триггер для повторного нажатия. Поэтому я, очевидно, что-то делаю неправильно, и надеюсь, что кто-то может помочь.

Позвольте мне сказать, что лазерный звук воспроизводится в первый раз, так что не беспокойтесь обо всем коде, который я не хочу показывать, чтобы сделать эту часть кода работой. Однако, если вам нужна дополнительная информация, чтобы понять, как я делаю что-либо, просто дайте мне знать. И спасибо заранее!

+0

Просто подумайте, не погружаясь в свой код: ваш soundChannel имеет свойство «position» только для чтения. Когда вы пытаетесь запустить лазер, просто проверьте положение канала. Если оно больше 0 (это означает, что он играет, если вы не остановили его на полпути), не позволяйте вашей функции стрелять. – Craig

+0

Используйте «глобальную» переменную через статический член класса, как я предложил здесь: http://stackoverflow.com/a/41651064/4687633 – Organis

+0

@Craig, если я не понимаю, это звучит как еще один способ сделать то, что я пытаюсь сделать однако, это все еще работает только в классе SoundController. Мне по-прежнему нужен способ передать эту информацию моему классу ControlPanel, где я пытаюсь выполнить эту проверку «если». – FlashNoob468

ответ

0

Если soundController И ControlPanel инстанцируются в Main:

обрабатывать событие стрельбы, в ControlPanel, как это:

if(MovieClip(parent).soundController.soundChannel.position==0) 
{ 
    MovieClip(parent).soundController.laserfire(); 
}else{do nothing;} 

Конечно использовать собственные имена экземпляров.

Если это не сработает, вам придется сделать код немного понятным.

0

Извините, что тратишь время на все. Я закончил тем, что выяснил, что мне нужно сделать, чтобы сделать эту работу. Вероятно, это будет не очень полезно для кого-либо еще, поскольку моя установка, вероятно, была уникальной для моего макета, а не того, что кто-то еще попытается, но вот что я сделал в любом случае.

В моем ControlPanel.as я добавил следующий код:

private var _soundController:SoundController; 

А то у меня есть функция, которая ждет для ControlPanel быть добавлено к сцене и как только это происходит, я выстрелил:

_soundController = new SoundController(docRef); 

Теперь, добавляя те, которые я мог просто позвонить:

if(!_soundController.laserPlaying) { do stuff; } 

Теперь см ms, чтобы ожидать, что laserPlaying будет ложным, а затем будет двигаться по назначению.

+0

Если это действительно не будет полезно кому-либо, действительно нет ничего плохого в удалении вашего вопроса. Я делал это несколько раз, так как я не хочу добавлять к муре, который является Интернетом. –

Смежные вопросы