![]() |
Код AS3:
через другой класс как мне обратиться к каналу, объявить переменную этого канала или как?на выходных другим занялся,но нужно уже добить этот звук,подскажите как |
У Вас же есть свойство someChannel, к нему и обращайтесь.
Как я могу более подробно ответить, не понимая иерархию Ваших классов? Я например совершенно не понимаю, зачем нужен этот класс, в чем его уникальность (его абстракция), почему он называется Sound_Volume, если никак не влияет на громкость звука, и чем он превосходит собственно базовый класс Sound. Другими словами, почему эти три строчки нельзя было написать там, где они нужны, зачем создавать упаковку для обертки. Классы должны исполнять четко определенный уникальный функционал. Этот класс делает абсолютно то же самое, что и класс Sound. Все его отличие в том, что путь к файлу звука в нем захардкоден. То есть функционал класса Sound был не расширен, а заужен. В чем смысл этой "новой" сущности? |
у меня есть небольшое меню игры,и чтоб музыка играла во всех разделах меню мне нужно писать в отдельном классе(общее для меню),а громкость мне нужно уменьшать с помощи ползунка в одном разделе меню(настройки)
|
ОК. Кто стартует музыку? Кто создает экземпляр Sound_Volume? Кому свитчер должен сообщать, что его переключили?
Очевидно, что подписаться на события от свитчера Вы сможете только тогда, когда он будет создан. Тот, кто создает свитчер, должен иметь ссылку на того, кто создал Ваш лоадер звука, затем получить от него ссылку на лоадер звука и от него — ссылку на канал. Классический вариант выглядел бы иначе: свитчер посылает событие что его переключили тому, кто его создал и подписался на это событие. В Вашем случае, вероятно, это окно меню Настроек. Настройки, вообще-то, должны где-то сохраняться и применяться. То есть окно настроек должно что-то менять в некоей базе настроек, к которой есть доступ всем, кто интересуется настройками — менеджеру звуков в частности. База настроек должна извещать заинтересованных лиц при изменении настроек. То есть менеджер звука (возможно, до него вырастет Ваш Sound_Volume) получит сообщение от БазыНастроек, что громкость звука поменялась, и тогда применит soundTransform к каналу воспроизведения (или каналАМ, если будут другие). |
Sound_Volume это класс я недавно создал,думал так правильно,у меня есть класс Preference(настройки)
там создан свитчер,он там работает если писать код который вы писал в теме(когда захожу в раздел настроек стартует музыка и я могу ей управлять с помощи свитчера) ,но он работает только на этом скрине Prefernce ,когда заходишь в этот раздел, а мне нужно чтоб музыка играла во всей флешьке а свитчер регуляровал эту фоновую музыку,подскажите тогда как создать класс чтоб играла музыка в меню и регулировалась свитчкром в другом классе (Preference) |
Ну во-первых SoundVolume (давайте все же называть сущности по конвенции) не должен находиться в меню, если отвечает за музыку во всей игре.
Во-вторых, надо сделать в нем метод, управляющий звуком, что наконец-то и название его оправдает)) Канал нам известен в этом классе, и нет смысла отдавать его кому-то. Можно менять громкость прямо на месте, так ведь? Вот и будет и "Sound", и "Volume" при делах. Далее, у Preferences должна быть ссылка на экземпляр SoundVolume, чтобы он мог приказать изменить громкость при изменении настроек. Как всего этого достигнуть? Ну обычно созданием объектов по порядку. То есть звук у Вас создается, очевидно, сразу при запуске игры. То есть в Мейне или другом из старших классов. Если там же будет создаваться и Preferences, то Вы сможете передать ему ссылку на звук прямо на месте, не протаскивая ее через другие сущности. Еще вариант (который я обычно не рекомендую))) это завести публичную переменную в Мейне, до которой можно достучаться из любого места (в чем, собственно, и порочность этого метода). А там, где Вы создаете экземпляр свитчера, у Вас обязана быть ссылка на Preferences, ведь свитчер вносит изменения в настройки. Вот как бы все и связалось. Звук играет все время в любом месте ("расположен" в Мейне), а когда дергаете свитчер в окне настроек, тот посылает событие, окошко настроек звука его ловит и сообщает Preferences, а Preferences дергает метод изменитьГромкость в экземпляре SoundVolume. |
все подробно описали,спасибо,просто я с музыкой так особо не работал,и поэтому я не знаю как правильно передать ссылку на канал и т,д,
можете написать как мне правильно добавить музыку и как обьявить канал в Preference чтоб его изменять свитчером,а то походу я долго буду делать( |
Допустим создадим класс GameSound:
Код AS3:
Если создаете их в одной области видимости, то можно передать ссылку например в конструктор Preferences Код AS3:
Далее, в классе Preferences должен быть метод, устанавливающий громкость (в Вашем случае это true или false): Код AS3:
Код AS3:
|
Код AS3:
TypeError: Error #1009: Cannot access a property or method of a null object reference. at Preference/set backgroundMusic() at Preference/handlerSoundON() at flash.events::EventDispatcher/dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at Switcher/setPimpPosition() at Switcher/init() at flash.display::DisplayObjectContainer/addChild() at Preference/init() at flash.display::DisplayObjectContainer/addChild() at ScreenHand/switchTo() at Start/PlayPreference() вот мой преференс,там вставлен свитчер а soundGame это я решил создать новый и вставил ваш код, я уже заколебался,надеюсь это последняя ошибка а,кстати,такой вопрос Я же могу кинуть музыку просто на сцену и поставить Loop только как мне обратиться чтоб vol уменьшить только этого звука?или это невозможно? |
ну обрати внимание на ошибку, на что ругается, все ж понятно
|
| Часовой пояс GMT +4, время: 21:57. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.