Sistema de Musicas aleatórias

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Sistema de Musicas aleatórias

Mensagem por Mateus O de Andrade em Qua 10 Set 2014, 14:13

Boa tarde pessoal,
Estou trabalhando em um projeto que possui um sistema de musicas aleatórias ao iniciar o nível.

Este é o código que eu utilizo:

CREATE:
Código:

//Seleção de Musicas
global.musica=choose("a","b","c","d")

if global.musica="a"

{
sound_loop(snd_mission_a)
}

if global.musica="b"

{
sound_loop(snd_mission_b)
}
if global.musica="c"

{
sound_loop(snd_mission_c)
}
if global.musica="d"

{
sound_loop(snd_mission_d)
}

É, eu sei que a está altura do campeonato eu já deveria estar usando switch case mas é um vício que eu carrego dos tempos de VBA...

O sistema está funcionando mas eu sempre gosto de fazer da maneira mais correta possível.

No entanto eu notei que poderei enfrentar certos problemas co esse sistema como:

E se eu usar muitas faixas?
E para parar essa musica que foi selecionada?

Para parar eu estou usando a função sound_stop_all, que também está funcionando bem, mas ainda não é o que eu quero (que é parar somente a musica em execução). Tentei salvar a faixa em uma variável (global.soundtrack) e depois para-la com o sound_stop(global.soundtrack) mas não deu certo. Não sei se foi algum erro meu ou da maneira que eu usei.

Por isso aqui estão minhas dúvidas de maneira direta e resumida:

Quanto ao sistema: Tem maneira melhor (aparte do switch case) ou assim está bom?

Quanto a parar a musica:  Tem como descobrir que som está tocando para parar este em especial? Tem como fazer melhor?

Bom por agora é isso, agradeço a atenção desde já pessoal.

Mateus O de Andrade

Ranking : Nota D
Número de Mensagens : 399
Idade : 31
Data de inscrição : 25/03/2014
Reputação : 37
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Sistema de Musicas aleatórias

Mensagem por Lighter em Qua 10 Set 2014, 14:45

Se estiver usando o GM:S, a função sound_(...) ficou obsoleta. E para substituir essa atribuição tem o audio_(...).

Vou dar um exemplo dessa função;
GMS:
Código:
if keyboard_check_pressed(vk_enter)
 {
  if audio_is_playing(audio)
   {
   audio_stop_sound(audio)
   audio_play_sound(audio2,false)
   }
 }

GM8:
Código:
if keyboard_check_pressed(vk_enter)
 {
  if sound_isplaying(audio)
   {
   sound_stop(audio)
   sound_play(audio1)
   }
 }

Lighter

Ranking : Sem avaliações
Número de Mensagens : 307
Idade : 18
Data de inscrição : 16/01/2014
Reputação : 29
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 1
   : 0

http://google.com

Voltar ao Topo Ir em baixo

Re: Sistema de Musicas aleatórias

Mensagem por Mateus O de Andrade em Qua 10 Set 2014, 15:23

Boa tarde Lighter,
Já pensei nessa função (uso o GM Cool.
Atualmente eu uso 4 músicas para fase, 1 para cada chefe, uma para abertura, 1 para seleção de naves e uma para seleção de atributos e fases. Com 4 níveis é fácil usar 4 if's mas e se eu usar um número de músicas maior, estou pensando não só nesse projeto mas também em futuros trabalhos.

Com sua experiencia e também a dos demais colegas, tem alguma forma mais eficaz?

P.S.: Aquele bonequinho não devia estar li em cima....

Mateus O de Andrade

Ranking : Nota D
Número de Mensagens : 399
Idade : 31
Data de inscrição : 25/03/2014
Reputação : 37
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Sistema de Musicas aleatórias

Mensagem por DieBoy em Qua 10 Set 2014, 16:53

Olá, para facilitar sua vida, e não precisar de tantos if's. Você pode guardar suas músicas em uma array, e depois executar uma delas aleatoriamente.

exemplo:
Código:

musicas[0] = sd_1;
musicas[1] = sd_2;
musicas[2] = sd_3;
musicas[3] = sd_4;
sound_play( musicas[irandom_range(0, 3)] );

DieBoy

Número de Mensagens : 91
Data de inscrição : 22/08/2014
Reputação : 49
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Sistema de Musicas aleatórias

Mensagem por Mateus O de Andrade em Qua 10 Set 2014, 17:07

Putz cara, nem lembrei dos arrays!! Valeu cara, um problema a menos.
Vou aproveitar a dica para dar uma polida em outros códigos que já estão prontos.

Muito obrigado DieBoy.

Mateus O de Andrade

Ranking : Nota D
Número de Mensagens : 399
Idade : 31
Data de inscrição : 25/03/2014
Reputação : 37
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Sistema de Musicas aleatórias

Mensagem por Willy em Qui 11 Set 2014, 00:07

Seguindo o princípio que o DieBoy citou, você pode aprimorar ainda mais usando ds_list! Usando-a, você tem a vantagem de inserir ou remover as músicas quando quiser e não tem o problema de precisar saber o tamanho total da array (ou quantidade de músicas, como preferir), para tal, faça algo mais ou menos assim:

Primeiro, você declara uma lista:

Código:
ListaDeMusicas = ds_list_create();
Em seguida, você adiciona as músicas nesta lista, da seguinte forma:
Código:
ds_list_add(ListaDeMusicas, musica1);
ds_list_add(ListaDeMusicas, musica2);
ds_list_add(ListaDeMusicas, musica2);
O ds_list tem a vantagem de possuir uma função que retorna a quantidade de itens contidas na lista, e usando em conjunto com um irandom, temos um belo sistema que toca músicas aleatórias!

Código:
Random = irandom(ds_list_size(ListaDeMusicas)); //Num aleatório baseado no tamanho da lista.
Musica = ds_list_find_value(ListaDeMusicas, Random); //Pega a musica da lista.
audio_play_sound(Musica,false); //Reproduz a musica escolhida anteriormente

Desta maneira, ocorre a chance da música repetir. Podemos opcionalmente evitar isso removendo a música selecionada da lista, basta adicionar a seguinte linha de código: 

Código:
ds_list_delete(ListaDeMusicas,Random);

ds_list, bem como outros tipos de lista (stack, queue, priority_queue, maps...) são muito úteis e fáceis de se usar quando se entende por completo o seu funcionamento. Procure saber mais sobre elas e verá como são importantes!

Flws... blz

___________


Engines, tutoriais e projetos? Clique no banner!



Atenção:
Comporte-se, senão você vai levar a cintada do Willy no meio da bunda! bravo


Willy

Ranking : Nota A
Número de Mensagens : 1812
Idade : 23
Data de inscrição : 08/06/2009
Notas recebidas : C + B + A + A
Reputação : 245
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 1

http://willy-gmbr.blogspot.com/

Voltar ao Topo Ir em baixo

Re: Sistema de Musicas aleatórias

Mensagem por Mateus O de Andrade em Qui 11 Set 2014, 08:17

Bom dia Willy,
Realmente esse código vai dar uma otimizada no meu trabalho.
Hahahaha o jogo não iria ter a função de inventário mas agora, com essa nova ferramente a minha disposição, me sinto obrigado a implementar novos recurções no meu projeto.

Muito obrigado Willy e DieBoy pelas dicas.


P.S.: Cara nunca falei nada, mas não sei por que me bate uma SAUDADE do Ragnarok quando eu vejo essa sua imagem Willy scratch

Mateus O de Andrade

Ranking : Nota D
Número de Mensagens : 399
Idade : 31
Data de inscrição : 25/03/2014
Reputação : 37
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Sistema de Musicas aleatórias

Mensagem por Conteúdo patrocinado Hoje à(s) 12:27


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum