Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D

Ответ
 
Опции темы
Старый 19.09.2007, 20:08   #16
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Re: Меню

ээ с каналами это точно, надо вот так вот:
1) Создаем переменную для канала( напр kanal1 = PlaySound(sound))
2) Затем когда начинается загрузка игры выключем канал таким вот образом StopChannel kanal1
Вроде так должно работать.
PS. Где sound там дожно быть имя переменной содержащей звук( или хотя бы команда LoadSound("твоя_музыка"))
PSS.
Точно скзаать не могу, но там вроде надо с каналами работать.. как-то , вроде, создавать канал, в него записыват музон, проигрывать канал (также через каналы можно управлять громкостью и стерео), и останавливать его...
В таком случе PlayMusic работать не будет.
PSSS. И еще LoadSound() загружает только mp3,wav,raw,ogg
__________________

(Offline)
 
Ответить с цитированием
Старый 19.09.2007, 20:13   #17
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Re: Меню

говоря музон, я не имел ввиду команду PlayMusic.. я имел ввиду музон
(Offline)
 
Ответить с цитированием
Старый 05.10.2007, 20:32   #18
Exploder
Оператор ЭВМ
 
Регистрация: 20.02.2007
Сообщений: 37
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Меню

Чоу то у меня не получается так сделать.
mr.DIMAS, можешь поподробнее написать?
(Offline)
 
Ответить с цитированием
Старый 05.10.2007, 21:44   #19
Stabilitron
Нуждающийся
 
Аватар для Stabilitron
 
Регистрация: 01.07.2007
Сообщений: 58
Написано 15 полезных сообщений
(для 49 пользователей)
Re: Меню

В процессе воспроизведения может понадобится остановка звука, продолжение его проигрывания, изменения каких-либо характеристик, увеличение-уменьшение громкости и т.д. Давайте приведем небольшой пример, как это можно реализовать в Blitz3D. Подопытным файлом будет .mp3 файл с битрейтом 44 кГц. Алгоритм действий будет таков: начнем воспроизводить файл, приостановим воспроизведение, продолжим проигрыш, изменим частоту звучания, вернем исходную частоту и, напоследок, поочередно сместим воспроизведение для правого и левого динамика. Код для нашего алгоритма будет выглядеть так:sound=LoadSound("sound1.mp3")
LoopSound
sound

channel=
PlaySound
(sound)

Print"Playing sound for 2 seconds ..."

Delay
2000

Print"Pausing sound for 2 seconds ..."

PauseChannel
channel
Delay
2000

Print"Restarting sound ..."

ResumeChannel
channel
Delay
2000

Print"Changing frequency of sound ..."

ChannelPitch
channel, 22000
Delay
2000

Print"Restore previous frequency of sound ..."

ChannelPitch channel, 44000
Delay
2000

Print"Left speaker only"

ChannelPan channel,-1
Delay
2000

Print"Right speaker only"

ChannelPan channel,1
Delay
2000

Print
"All Tests complete!"

StopChannel channel11.2. Каналы и регулировка громкости

Как вы поняли из предыдущего пункта урока, дальнейшая манипуляция звуками и музыкой после загрузки и начала воспроизведения основывается на методике каналов: (
CHANNEL ). Следовательно при вызове функции PlaySound() вы должны назначить возвращаемое значение непременной символизирующей канал таким образом:
chnWave = PlaySound( mySound ) Все последующие функции работы со звуком, используют впоследствии эту переменную, а не переменную, возвращаемую функцией LoadSound(). Это такие функции как: StopChannel(), PauseChannel(), ResumeChannel(), ChannelPitch(), ChannelVolume(), ChannelPan(), and ChannelPlaying(). В качестве первого аргумента всех этих функций как раз и выступает переменная chnWave (в нашем случае). Естественно, что благодаря этому вы можете воспроизводить параллельно несколько звуков, проигрывать музыкальный трек и по ходу дела менять параметры воспроизводимых эффектов - громкость, частоту и т.д.
Давайте сделаем маленькую программу, меняющую громкость звуков и музыки при нажатии клавиш. Стрелки "вправо - влево" - будут менять звуки речи, а "вперед - назад" - музыкальный "бэкграунд" (в качестве которого будем использовать звук ветра из первого пункта текущего урока)

Print"Press arrows to change the Volume"
sound1=
LoadSound("sound1.mp3")
LoopSound sound1
sound2=
LoadSound("wind1.mp3")
LoopSound sound2


channel1=
PlaySound(sound1)
channel2=
PlaySound(sound2)

iSpeechVolume# = 0.2
iWindVolume# = 0.4

ChannelVolume channel1, iSpeechVolume
ChannelVolume channel2, iWindVolume


WhileKeyDown(1) <> True

IfKeyHit(203) = True
If iSpeechVolume > 0
iSpeechVolume = iSpeechVolume - 0.1
EndIf
ChannelVolume channel1, iSpeechVolume
EndIf

IfKeyHit(205) = True
If iSpeechVolume < 1
iSpeechVolume = iSpeechVolume + 0.1
EndIf
ChannelVolume channel1, iSpeechVolume
EndIf

IfKeyHit(20 = True
If iWindVolume > 0
iWindVolume = iWindVolume - 0.1
EndIf
ChannelVolume channel2, iWindVolume
EndIf

IfKeyHit(200) = True
If iWindVolume < 1
iWindVolume = iWindVolume + 0.1
EndIf
ChannelVolume channel2, iWindVolume
EndIf

Wend

EndВыполните программу и нажимайте стрелки "вправо-влево", "вперед-назад" для изменения громкости ветра и речи. Изменения происходят в диапазоне от 0 до 1.

Помимо функции LoadSound() Blitz3D поддерживает функцию PlayMusic() для множества музыкальных форматов, перечисленных выше. В отличии от функции LoadSound() она сама загружает и начинает проигрывать музыкальный файл. PlayMusic() возвращает переменную канала, которая обрабатывается уже известными Вам способами.
Внимание: для проигрывания .mid (MIDI файлов) нужно обновить Blitz3D до версии 1.88 иначе на некоторых компьютерах воспроизведение данного формата музыкальных файлов может не происходить!

11.3. Объемный звук

Каким бы качественным не был звук в игре, он не может создать полноты ощущения присутствия без применения объемного звука. Blitz3D обладает набором функций для эмуляции трехмерного звучания. Так, например, звук может быть связан с каким-то объектом, а слушателем звука, будет наш игрок (или связанная с ним камера). Тогда при изменении взаимного положения этих объектов, мы почувствуем изменение направления источника звука, а также уменьшении или увеличение его громкости при удалении или приближении к этому источнику.
Функций для работы с объемным звуком всего три:
Load3DSound()
CreateListener()
EmitSound()

Функция Load3DSound(filename$) - загружает звуковой файл и возвращает его идентификатор для работы функции EmitSound()
Что касается функции CreateListener(), то в ее обязанности входит установка объекта, который будет улавливать звук. В большинстве случаев в качестве такого объекта выступает камера. Также функция CreateListener() принимает три опциональных параметра:
rolloff_factor# - коэффициент, по которому звук уменьшается на расстоянии (1 по
умолчанию.)
doppler_scale# - соответствие закону эффекта допплера. (1 по умолчанию.)
distance_scale# - масштаб расстояний между объектами (1 по умолчанию.)

И последняя функция: EmitSound() - собственно воспроизводит объемный звук, в в зависимости от текущего положения объектов источника и приемника звука. Этой функции можно передавать два аргумента:
sound - идентификатор звука, загруженного ранее функцией Load3DSound()
entity - объект - источник звука.

Располагая этими тремя функциями, звуковым файлом, известной уже моделью кораблика (ship1t.md2 с его текстурой ship.jpg) и анимированной текстурой воды (wateranim.jpg)
создадим небольшой пример для демонстрации объемного звука. Задание для примера: загрузить модель корабля, звук, связать объект приемника звука с камерой, а источник с кораблем. Все это решается следующим кодом:

Graphics3D 640, 480,16,2
SetBufferBackBuffer()

Global Ship

player=
CreateSphere()
PositionEntity player, -12, 1, -5
cam=
CreateCamera(player)
TurnEntity player, 0,0,0

TurnEntity player,0,-30,0

light=
CreateLight(2)
PositionEntity light,0,60,30

; Load the animation strip for the water texture
watertext=
LoadAnimTexture("wateranim.jpg",256,124,124,0,25)
water=
CreatePlane()
PositionEntity water,0,0,0
ScaleTexture watertext, 20,20

PlaceShip()

listener=
CreateListener(cam,1,1,1)
shipsound=
Load3DSound("boat.wav") ; Load 3D sound
LoopSound shipsound

EmitSound(shipsound, ship)


WhileKeyHit(1) <> True

wd=wd+1
If wd=4
EntityTexture water,watertext,frame,1
frame=frame+1
If frame=22 Then frame=0
wd=0
EndIf

MoveEntity ship, 0,0,-0.01
If KeyDown(200) MoveEntity player,0,0,0.1
If KeyDown(20 MoveEntity player,0,0,-0.1
If KeyDown(203) TurnEntity player,0,2,0
If KeyDown(205) TurnEntity player,0,-2,0

UpdateWorld()
RenderWorld()
Flip

Wend

End

;=====================
Function PlaceShip()
shiptex =
LoadTexture("ship.jpg")
Ship =
LoadMD2("ship1t.md2")
ScaleEntity Ship, 0.1, 0.1, 0.1
EntityTexture Ship, shiptex
PositionEntity ship, 0,0,0
End FunctionКак видно из приведенного фрагмента - вся работа со звуком укладывается в четыре строчки:
listener=CreateListener(cam,1,1,1)
shipsound=
Load3DSound("boat.wav") ; Load 3D sound
LoopSound shipsound
EmitSound(shipsound, ship) Первая строчка назначает камеру в качестве приемника звука, затем грузится звук. Известная по предыдущим примерам функция LoopSound() указывает на необходимость повторения звука в цикле и последняя строка посылает команду на воспроизведение с назначением объекта корабль в качестве источника звука.

Вот это должно помоч

(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как программно узнать имя пункта меню который был выбран (Обычное/стандартные меню)? Richik Основной форум 5 25.05.2009 23:20
меню Pro_100_Den 3D-программирование 4 06.05.2009 10:38
Меню... KeipL Основной форум 11 26.07.2008 22:02
Меню S2k Основной форум 1 31.08.2007 23:53


Часовой пояс GMT +4, время: 21:38.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com