Página 1 de 1

Ponto de direção para todas instâncias

Enviado: Ter Jul 09, 2019 3:03 pm
por GM_PC_Jogos
Boa tarde para todos.
Estou aprendendo a programar no game maker studio 2 e não estou conseguindo solucionar um problema.
Estou criando um jogo de nave (para teste e aprendizado) em que naves inimigas aparecem aleatoriamente fora da room e que "todas" deveriam atirar na direção do (player).

No objeto obj_controle, no evento "step" possui o seguinte código:
if(random(100) > 99)){
instance_create_layer(1980, random_range(50, 1000), "Instances", obj_nave_inimiga_1);
}
esse código cria um numero aleatório de 0 a 100 a cada step e se o numero sorteado for maior que 99, cria uma nave inimiga em posições aleatórias fora da room em que todas se movimentam apenas em linha reta na (horizontal) da direita para esquerda.

No objeto "obj_nave_inimiga_1" no evento step possui o código:
if(instance_exists(obj_nave)){
instance_create_layer(x, y,"Instances", obj_tiro_inimigo)
}
aqui, se "obj_nave" (player) existe, cria um tiro.

No obj_tiro_inimigo, no evento create:
speed = 4;
direction = point_direction(obj_nave_inimiga_1.x, obj_nave_inimiga_1.y, obj_nave.x, obj_nave.y);

O problema é que apenas uma nave atira na direção do player, as outras atiram, mas seguem o mesmo padrão da nave que está atirando. Ou seja, os tiros seguem o mesmo padrão de uma nave que está atirando apenas. (não sei o entendimento ficou claro)
                                -------------------------------<-(enemy_2) (segue o padrão do enemy_1)
Exemplo:    (player) ->      -------------------------- <-(enemy_1) (Ponto de direção correto)
                                  -----------------------------<-(enemy_3) (segue o padrão do enemy_1)

Gostaria que todas instâncias atirassem na direção do player. Não sei o que está havendo de errado.

Quem puder ajudar eu agradeço.
Muito obrigado pela atenção de todos.

Re: Ponto de direção para todas instâncias  Tópico resolvido

Enviado: Ter Jul 09, 2019 8:47 pm
por Alex FC
O erro está no último código. Você utilizou obj_nave_inimiga_1.x, quando você faz isso ele pega a primeira instância do objeto (Ou dependendo da plataforma uma instância aleatória).

Lembre-se: Objetos são MOLDES, e instâncias são de fato o que é criado. Logo cria-se instâncias de objeto.

Para resolver seu problema basta adaptar o segundo código com o terceiro:

if instance_exists(obj_nave)
{
   // Guarda o ID da instância criada (Ou seja, o 'i' agora é o tiro criado)
   var i = instance_create_layer(x, y,"Instances", obj_tiro_inimigo);
   
   // Aplica velocidade e direção no tiro
   i.speed = 4;
   i.direction = point_direction(i.x, i.y, obj_nave.x, obj_nave.y);
}


obj_nave.x pode ser usado, pois temos certeza que há somente uma instância dela na room.

Re: Ponto de direção para todas instâncias

Enviado: Ter Jul 09, 2019 9:46 pm
por GM_PC_Jogos
Muito obrigado Alex.

Você conseguiu solucionar meu problema.
Agora as naves estão atirando em direção ao player.
Também estou entendendo melhor o que está acontecendo sobre as instâncias criadas.

Vlw!!!!!!