Показать сообщение отдельно
Старый 24.05.2007, 20:48   #2
Diplomat
Дэвелопер
 
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений
(для 164 пользователей)
Re: Как проиграть звук один раз?

Молодец. Желаение помогать другим похвально.

Необходимо тем не менее внести полную ясность в вопрос.

0. Чтоб проиграть звук один раз, достаточно один раз вызвать
PlaySound( ХендлЗагруженноговЗвука ) - и ничего более

1. Если речь идёт о размещении конструкции
[blitz]If ChannelPlaying(channel_sound)=0 Then channel_sound=PlaySound(sound)[/blitz] в цикле (зацикленные музыкальные отрывки, стрельба очередями, звук двигателя и т.п.) то термин "один раз" здесь очевидно не вполне уместен.

2. Если нужно просто и незамысловато зациклить звук, можно сделать это интуитивно: командой LoopSound()

3. Наконец, если LoopSound() не обеспечивает необходимой тактической гибкости, то вызывать ChannelPlaying() следует не слишком часто, т.к. это неизбежно приведет к жутЬким тормозам.

4. В итоге, конструкция приобретает приблизительно такой вид:
[blitz]
...
IF CheckChannelDelay<Millisecs() THEN
CheckChannelDelay=Millisecs()+DelayInMillisecs
IF ChannelPlaying(channel_sound)=False THEN channel_sound=PlaySound(sound)
END IF
...[/blitz]

P.S. Мы не упоминаем возможность циклить что-либо с помощью PlayMusic() вследствие нестабильности и тормозности сей команды.
(Offline)
 
Ответить с цитированием