O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Game Maker Studio (Destruição de Objeto)

Iniciado por mathpeseg, 15/05/2015 às 23:23

15/05/2015 às 23:23 Última edição: 18/05/2015 às 13:58 por King Gerar
Então, seguinte, tenho um objeto "Inimigo", e nele eu defini uma variável "hp" dentro de um evento "create", e setei ela em 100 (self.hp = 100;), ou seja, quando o objeto "Inimigo" é criado, ele cria a variável de vida para ele. Agora, dentro de um evento do tipo "step", adicionei uma condição "if (hp <= 0) { action_kill_object(); }", para quando o hp do "Inimigo" chegar a 0, ou menos, o objeto "Inimigo" em cena seja destruído.

Funciona, mas não quando eu crio vários objetos iguais dentro da cena, se eu faço isso, quando um dos objetos é destruído, todos os outros também são. Alguém sabe uma maneira de se fazer com que apenas uma das cópias do objeto em cena seja destruída no game maker studio?

Dentro do código do outro objeto que seria o objeto de criação de projeteis, criei um colisor dentro de um evento do tipo "step" assim:
if !place_free (x, y) 
    if !place_meeting (x,y,Jogador)
       if place_meeting (x,y, Inimigo)
       {
       instance_destroy();
       Inimigo.hp-=10;
       }


Alguém sabe como evitar que TODOS os objetos iguais dentro da cena sejam destruídos?

é só utilizar o instance_destroy(), ao em vez de destruir todos os objetos no mapa, ele apenas deleta a instancia.

Citação de: Phantomx online 16/05/2015 às 13:19
é só utilizar o instance_destroy(), ao em vez de destruir todos os objetos no mapa, ele apenas deleta a instancia.

Já tinha tentado isso. Isso foi a primeira coisa que eu fiz no código, mudei para action_kill_object porque o instance_destroy não estava funcionando, mas mesmo assim não deu certo. Não sei porque ele sempre deleta todos os objetos "clones" em cena. To tentando descobrir isso faz um tempo, procurei dicas no youtube, tutoriais por tudo, fucei em tudo que eu podia, mas não consegui achar uma maneira de resolver. To ficando desesperado já.
:T.T:


Citação de: mathpeseg online 15/05/2015 às 23:23

Dentro do código do outro objeto que seria o objeto de criação de projeteis, criei um colisor dentro de um evento do tipo "step" assim:
if !place_free (x, y) 
    if !place_meeting (x,y,Jogador)
       if place_meeting (x,y, Inimigo)
       {
       instance_destroy();
       Inimigo.hp-=10;
       }


Alguém sabe como evitar que TODOS os objetos iguais dentro da cena sejam destruídos?

O problema é esse "Inimigo.hp-=10;", basicamente você está tirando o hp de todas as instancias do objeto. Acho que a solução seria colocar o other, se não me engano ele funciona apenas com a instancia que está colidindo e não com o objeto, e se não funcionar, é melhor colocar a colisão no inimigo mesmo.

...
if(place_meeting(x,y,Inimigo)
{
instance_destroy();
other.hp -= 10;
}

Eu tentei isso ontem, e não funcionou. Sobre colocar o colisor dentro do inimigo, não tinha pensado nisso.
Testei e funcionou agora, só a colisão do projétil que ficou errada, mas isso é porque eu removi todo o colisor do projétil, acho que dá pra deixar apenas o instance_destroy nele.

Perfeito! ou quase... No instance_destroy que deixei no projétil, ele fica notificando algum problema, mas fechando o console o jogo funciona direitinho. Sabe porque ele fica notificando erro?


ao que parece o objeto Factory não existe, ou o nome está escrito errado.

17/05/2015 às 23:35 #6 Última edição: 17/05/2015 às 23:37 por mathpeseg
Ele existe sim... Mas o problema já foi resolvido, depois de abrir e fechar o gamemaker ele passou a não dar mais esse erro. Enfim, obrigado por tudo. (Uma pena não estar habilitado dar ouro nessa parte do fórum)
:ok: