Problemas com àudio - só o primeiro é executado!
Ir à página 1, 2  Próximo
 
   3D Game Builder - Índice » Programação
Problemas com àudio - só o primeiro é executado!
Autor Mensagem
Lemos
Usuário
Usuário


Registrado: 14/04/09
Mensagens: 802
Localização: Rio de Janeiro - RJ

Problemas com àudio - só o primeiro é executado!
Amigos, seguindo os procedimentos, cadastrei 3 áudios no banco de dados e carreguei-os no mapa no evento OnCreate:

//--Script Builder: som de passos para o jogador principal---//
LoadAudio('2');
LoadAudio('Disparo');
LoadAudio('RoboAtaque');
//---End Script Builder---//


Depois, programei as ações de modo que os áudios fossem emitidos pelo player, pelo robô e pela arma dele durante o disparo (esse script está no evento MainLoop do mapa):

//--Script Builder: som de passos para o jogador principal e som de disparo da Arma---//
if GetObjectAnimation('MainActor') = 'run' then
begin
Playaudio('player' , '2');
end
else if GetObjectAnimation('MainActor') <> 'run' then
begin
stopaudio('player');
end
else if GetObjectAnimation('mainactorweapon') = 'attack' then
begin
Playaudio('Arma01' , 'Disparo');
end
else if GetObjectAnimation('mainactorweapon') <> 'attack' then
begin
stopaudio('Arma01');
end
else if GetObjectAnimation('RoboPrincipal') = 'attack' then
begin
Playaudio('RoboPrincipal' , 'RoboAtaque');
end
else if GetObjectAnimation('Roboprincipal') <> 'attack' then
begin
stopaudio('RoboPrincipal');
end;
//---End Script Builder---//


Só que somente o som de passos é executado... Durante a caminhada, eu acho que os outros sons parecem estar presentes, não tenho certeza, mas o fato é que nem o som da arma e nem o som do ataque do robô é executado. Notem que tomei o cudado de não colocar mais de 1 som por objeto. Os scripts foram verificados e não tem erros. Também não há problemas durante o jogo, simplesmente apenas o primeiro audio, o de passos, é executado durante o jogo. Confused
Abraço



_________________
Lemos
http://alemdanimacao.zip.net/
Sex Jul 24, 2009 11:48 pm Exibir perfil de usuários
Edirlei
Administrador
Administrador


Registrado: 15/03/08
Mensagens: 760

Olá,
Não cheguei a testar o seu código para saber o que esta errado, mas encontrei aqui um pequeno exemplo feito para testar o áudio, estou disponibilizando o projeto para você:

https://edirlei.com/3dgamebuilder/temp/TesteAudio.rar

O exemplo tem um som ambiente executado em loop, os passos do jogador, e uma explosão que é executada quando a tecla ctrl é pressionada. Os únicos scripts criados estão no OnCreate e MainLoop do mapa.

Note que um mesmo objeto não pode emitir dois sons ao mesmo tempo, pode ser que esse seja o seu problema, no exemplo os passos e a explosão estão associados ao mesmo objeto e somente um por vez pode ser executado, no caso o jogador não poderia atirar quanto estivesse andando, porém o som ambiente esta associado a outro objeto, permitindo que viários sons seja executados ao mesmo tempo.
Sáb Jul 25, 2009 5:04 am Exibir perfil de usuários
Lemos
Usuário
Usuário


Registrado: 14/04/09
Mensagens: 802
Localização: Rio de Janeiro - RJ

Edirlei escreveu:
Olá,
Não cheguei a testar o seu código para saber o que esta errado, mas encontrei aqui um pequeno exemplo feito para testar o áudio, estou disponibilizando o projeto para você:

https://edirlei.com/3dgamebuilder/temp/TesteAudio.rar

O exemplo tem um som ambiente executado em loop, os passos do jogador, e uma explosão que é executada quando a tecla ctrl é pressionada. Os únicos scripts criados estão no OnCreate e MainLoop do mapa.

Note que um mesmo objeto não pode emitir dois sons ao mesmo tempo, pode ser que esse seja o seu problema, no exemplo os passos e a explosão estão associados ao mesmo objeto e somente um por vez pode ser executado, no caso o jogador não poderia atirar quanto estivesse andando, porém o som ambiente esta associado a outro objeto, permitindo que viários sons seja executados ao mesmo tempo.


Obrigado Edirlei, vou testar aqui. Antes o script de passos era acionado pelas teclas direcionais, mas eu descobri que o script rejeita a tecla de espaço 0x20, que dispara a arma, então resolvi associar o som à animação, de modo que qdo apertamos a a tecla de disparo, a ação da arma que é attack é executada e deveria acionar o script.
Se puder testa para mim.
Abraço

_________________
Lemos
http://alemdanimacao.zip.net/
Sáb Jul 25, 2009 11:47 am Exibir perfil de usuários
Lemos
Usuário
Usuário


Registrado: 14/04/09
Mensagens: 802
Localização: Rio de Janeiro - RJ

[Primeiro teste com script do Exemplo do Edirlei, não fiz usando teclas por causa do problema com a tecla de Espaço (0x20); erro total:

On create:

//--Script Builder: som de passos para o jogador principal---//
LoadAudio('2');
LoadAudio('Disparo');
LoadAudio('RoboAtaque');
//---End Script Builder---//


MainLoop

//--Script Builder: som de passos para o jogador principal e som de disparo da Arma---//
if GetObjectAnimation('MainActor') = 'run' then
PlayAudio('AudioListener', '2');

if GetObjectAnimation('MainActor') = 'attack' then
PlayAudio('AudioListener', 'Disparo');

if GetObjectAnimation('RoboPrincipal') = 'attack' then
Playaudio('RoboPrincipal' , 'RoboAtaque');
//---End Script Builder---//


Eu entendi que os dois áudios são associados ao player de forma hierarquica, acionados por teclas diferentes. Então só escrevi o acionaemto pela animação. Observei que quando ele dispara ele usa a animação attack. Bom, o fato é que nem comecei a executar a animação e deu erro. Vou tentar fazer com teclas então. Olhem a imagem:


http://img150.imageshack.us/img150/6866/errodeexecuoscripudioed.jpg

_________________
Lemos
http://alemdanimacao.zip.net/
Dom Jul 26, 2009 7:01 pm Exibir perfil de usuários
Lemos
Usuário
Usuário


Registrado: 14/04/09
Mensagens: 802
Localização: Rio de Janeiro - RJ

Esqueci de postar o script do exemplo do Edilei:


On Create do mapa


SetObjectHierarchicalParent('AudioListener', 'MainActor');
{Os sons Walk e Shoot estão associados ao objeto AudioListener que esta no cenario,
ele é adicionado hierarquicamente no ator principal, assim o som sempre será
ouvido pelo jogador como se viesse do personagem principal.}

LoadAudio('Walk');
LoadAudio('Shoot');
LoadAudio('Wind');


Mainloop do mapa

if (IsKeyPress(3Cool)or(IsKeyPress(40)) then
PlayAudio('AudioListener', 'Walk');

if (IsKeyPress(17)) then
PlayAudio('AudioListener', 'Shoot');

if (not IsPlaying('Objeto0')) then
PlayAudio('Objeto0', 'Wind');
{O som ambiente (wind) esta associado ao chão e será executado em loop,
como o audio é 3D ele será ouvido com maior intensidade no centro do cenario.}

_________________
Lemos
http://alemdanimacao.zip.net/
Dom Jul 26, 2009 7:04 pm Exibir perfil de usuários
Lemos
Usuário
Usuário


Registrado: 14/04/09
Mensagens: 802
Localização: Rio de Janeiro - RJ

Desisto por Enquanto... Demora 100 anos para salvar e dá erro:




Mudei a tecla de disparo da arma para o alt, tecla 17; tomei o cuidado de mudar ela também nas armas do ator principal

On create:

//--Script Builder: som de passos para o jogador principal---//
LoadAudio('2');
LoadAudio('Disparo');
LoadAudio('RoboAtaque');
//---End Script Builder---//


MainLoop

//--Script Builder: som de passos para o jogador principal e som de disparo da Arma---//
if (IsKeyPress(3Cool)or(IsKeyPress(40)) then
PlayAudio('AudioListener', '2');

if (IsKeyPress(17)) then
PlayAudio('AudioListener', 'Disparo');
//---End Script Builder---//



Nem dá para rodar o jogo... Volei ao velho script:


On create:


//--Script Builder: som de passos para o jogador principal---//
LoadAudio('2');
LoadAudio('Disparo');
LoadAudio('RoboAtaque');
//---End Script Builder---//



MainLoop:

//--Script Builder: som de passos para o jogador principal e som de disparo da Arma---//
if GetObjectAnimation('MainActor') = 'run' then
begin
Playaudio('player' , '2');
end
else if GetObjectAnimation('MainActor') <> 'run' then
begin
stopaudio('player');
end
else if GetObjectAnimation('mainactorweapon') = 'attack' then
begin
Playaudio('Arma01' , 'Disparo');
end
else if GetObjectAnimation('mainactorweapon') <> 'attack' then
begin
stopaudio('Arma01');
end;
//---End Script Builder---//


Nesse script não há o erro de execução, só não tem o som de disparo da arma. Consegui fazer o robô emitir som depois do ataque (tirei o som dele do evento de mapa, isso foi erro meu mesmo), funcionou assim:

1 - no oncreate do mapa, cadastrei o som Roboataque.
2 - selecionei o robô, botão dreito, efeitos, áudio, Roboataque.
3 - No onloop do robô, coloquei o seguinte script:

OnLoop do robô

//--Script Builder: som de ataque do robô---//
if GetObjectAnimation('RoboPrincipal') = 'attack' then
begin
Playaudio('RoboPrincipal' , 'RoboAtaque');
end
else if GetObjectAnimation('Roboprincipal') <> 'attack' then
begin
stopaudio('RoboPrincipal');
end;
//---End Script Builder---//


Bom, é um mas por enquanto ainda não rola o som de disparo da arma, mas os passos funcionam e o ataque do robô também. Ainda não consigo fazer a animação pain do player funcionar bem, mas são os ossos do ofício.
No momento, em função do pouquíssimo tempo que tem para o fim do concurso, estou me concentrando nos scripts de inteligência artificial (já que o no de áudio minhas idéias se esgotaram), mas estou tendo problemas com o tempo de salvamento, que tá muito devagar... Isso pode comprometer o trabalho.
Fiquei muito satisfeito com a prorrogação do concurso, tinha tempo de sobra para trabalhar, mas meu trabalho é uma escravidão, e fui obrigado a montar o 12 Salão do Livro FNLIJ aui no Rio, ficando preso todos os dias e depois vijei para friburgo para montar a Fevest e uma Feira de Imóveis, isso acabou com todo o meu tempo.
Trabalhar com feiras e eventos é péssimo, você não tem sábado, domingo ou feriado, vira noites, trabalha além do limite do corpo (tenho hérnia de disco em função disso) e ganha mal, pque nada paga tanto esforço e afastamento da família...
Já tentei largar esa merda várias vezes, mas o mercado de trabalho é uma guerra...

Abraço a Todos



_________________
Lemos
http://alemdanimacao.zip.net/
Dom Jul 26, 2009 9:24 pm Exibir perfil de usuários
Edirlei
Administrador
Administrador


Registrado: 15/03/08
Mensagens: 760

Você criou o objeto AudioListener no mapa e associou os sons a ele? Porque o script parece estar certo.

Outra coisa, lá onde você esta verificando as animações para que o som seja executado, você acaba mandando executar centenas de vezes, porque a animações permanece por mais de um loop, antes de mandar executar o som verifique se ele já não esta sendo executado: if (not IsPlaying('RoboPrincipal')) then


Dom Jul 26, 2009 11:26 pm Exibir perfil de usuários
Lemos
Usuário
Usuário


Registrado: 14/04/09
Mensagens: 802
Localização: Rio de Janeiro - RJ

Edirlei escreveu:
Você criou o objeto AudioListener no mapa e associou os sons a ele? Porque o script parece estar certo.

Outra coisa, lá onde você esta verificando as animações para que o som seja executado, você acaba mandando executar centenas de vezes, porque a animações permanece por mais de um loop, antes de mandar executar o som verifique se ele já não esta sendo executado: if (not IsPlaying('RoboPrincipal')) then


Eu cometium erro aqui, entendo audiolistener como um comando e era um objeto! Localizei-o no mapa. Isso é tranquilo para entender e corrigir, mas a gente tem que clicar no objeto associar o som a ele, correto? Você associou os dois sons a um mesmo objeto, então? Isso não deveria dar erro? pode-se associar ainda mais?
E pelo que vejo, como é o objeto que emite os sons, se nos afastamos dele, o som enfraquece, certo? De repente, se for usado esse recurso de um objeto emissor, não tem uma forma dele ir acompanhando o player, como se fosse um objeto parenteado a ele, de modo que onde o player fosse os sons o acompanhassem?

_________________
Lemos
http://alemdanimacao.zip.net/
Seg Jul 27, 2009 3:45 am Exibir perfil de usuários
   3D Game Builder - Índice » Programação Ir à página 1, 2  Próximo
Página 1 de 2