Obrigado por visitar a The Game Makers Brasil 😁 Use o fórum de Dúvidas para fazer perguntas. Se está em busca de aprender dê uma olhada nos tutoriais.

Executar som adicionando caractere pelo código

Perguntas? A comunidade te ajuda a resolver.
Avatar do usuário
Felipe
Novato
Novato
Reações: 0
Mensagens: 6

Executar som adicionando caractere pelo código

Mensagem por Felipe » Sáb Jun 18, 2016 2:37 pm

Bom, essa duvida é um pouco difícil de explicar, ela usa o Game Maker 8.0 Pro. No projeto que estou fazendo há um script chamado hit que simplifica o processo de deixar efeitos gerados quando os obj_disparo atingem alguma coisa. Ele é adaptado pra incluir efeitos especiais no disparo, explosões, vínculo aos times e o assunto da minha dúvida: os sons. Vou colocar o script aqui:

Código: Selecionar todos

var xx, yy, escala_x, escala_y, imagem, variabilidade, tipo_angular, fumaca, efeito, som, time, poder, poder_de_impacto, objeto_de_impacto;
xx = argument0;
yy = argument1;
escala_x = argument2;
escala_y = argument3;
imagem = argument4;
variabilidade = argument5;
tipo_angular = argument6;
fumaca = argument7;
efeito = argument8;
som = argument9;
time = argument10;
poder = argument11;
poder_de_impacto = argument12;
if time=1
objeto_de_impacto = instance_create(xx,yy,obj_hit1)
if time=2
objeto_de_impacto = instance_create(xx,yy,obj_hit2)
objeto_de_impacto.image_xscale=escala_x
objeto_de_impacto.image_yscale=escala_y
objeto_de_impacto.sprite_index=imagem
objeto_de_impacto.mask_index=imagem
if !variabilidade=0
{
objeto_de_impacto.x+=random_range(-variabilidade,variabilidade)
objeto_de_impacto.y+=random_range(-variabilidade,variabilidade)
}
if tipo_angular=0
{
objeto_de_impacto.image_angle=irandom(360)
}
else
{
objeto_de_impacto.image_angle=tipo_angular
}
objeto_de_impacto.smk=fumaca
objeto_de_impacto.eff=efeito
objeto_de_impacto.damage=poder
Para descomplicar, ele gera um código assim:

Código: Selecionar todos

hit(x,y,image_xscale,image_yscale,sprite_index,offset,angle_type,smoke_type,effect,sound,team,damage,power)
O script não tem usos para o argument de som porque a função dele depende da distância do obj_char. Se o obj_char estiver muito próximo o som executado será o arquivo "(argument9)a". Se estiver a meia distância será o arquivo "(argument9)b" e se estiver muito longe do obj_char será o arquivo "(argument9)c". Mas é aí que está o problema: como fazer o script executar o nome dado ao argument e acrescentar uma letra ou caractere a mais como "a". No meu jogo o hit pode ser uma explosão, um disparo comum ou granada, e cada um tem um som diferente.
Há os arquivos snd_exp1asnd_exp1bsnd_exp1c. E também há os snd_ric1a, snd_ric1bsnd_ric1c. Ou seja, preciso colocar o snd_exp1 como argument no script hit e ele executar o snd_exp1a como som.
Espero que o esclarecimento da dúvida tenha ficado claro.
Editado pela última vez por Felipe em Sáb Jun 18, 2016 6:07 pm, em um total de 1 vez.

Avatar do usuário
Golden Bunny
Membro
Membro
Reações: 0
Mensagens: 44

Re: Executar som adicionando caractere pelo código

Mensagem por Golden Bunny » Sáb Jun 18, 2016 2:42 pm

Ué.

Código: Selecionar todos

audio_play_sound(asset_get_index(argument9+"a"));
argument9 deverá ser uma string.
"Nunca morra virgem, os unicórnios morreram virgens, por isso não existem mais" < Gonzo, o eterno filósofo.

Avatar do usuário
Felipe
Novato
Novato
Reações: 0
Mensagens: 6

Re: Executar som adicionando caractere pelo código

Mensagem por Felipe » Sáb Jun 18, 2016 2:45 pm

Então, há um pequeno problema: essas funções não existem

Avatar do usuário
Golden Bunny
Membro
Membro
Reações: 0
Mensagens: 44

Re: Executar som adicionando caractere pelo código

Mensagem por Golden Bunny » Sáb Jun 18, 2016 2:49 pm

Acabei de ver que não existem no GM8, não sei o que alguém faz usando GM8 em 2016, mas enfim.

Tente pegar o som com execute_string.
execute_string("sound_play(" + argument9 + "a" + ")");
"Nunca morra virgem, os unicórnios morreram virgens, por isso não existem mais" < Gonzo, o eterno filósofo.

Avatar do usuário
Felipe
Novato
Novato
Reações: 0
Mensagens: 6

Re: Executar som adicionando caractere pelo código

Mensagem por Felipe » Sáb Jun 18, 2016 2:55 pm

Não sabia dessa função, vou fazer alguns teste pra ver o resultado. O código está ficando mais ou menos assim

Código: Selecionar todos

if instance_exists(obj_char)
    {
    if distance_to_object(obj_char)<32
        {
        execute_string("sound_play("+ som + "a" +")");
        }
    if distance_to_object(obj_char)>31 and distance_to_object(obj_char)<64
        {
        execute_string("sound_play("+ som + "b" +")");
        }
    if distance_to_object(obj_char)>63
        {
        execute_string("sound_play("+ som + "c" +")");
        }
    }
Edit: 
Depois de um tempo testando compreendi a função, agora está tudo funcionando corretamente, obrigado pela ajuda.

Trancado

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes