Mensagem
por None » Sex Out 05, 2018 2:51 pm
Acabei de fazer um modelo.
No meu modelo eu tenho 3 objetos.
Bala
Slot
Arma
Eu preciso colocar a bala no slot, se o slot tiver uma bala ele pode ser movido, quando ele colidir com a arma ele volta à posição inicial e apaga a bala que está nele (passando ela para a arma) e deixando a arma carregada.
A arma só pode atirar se estiver
carregada e vai atirar um tipo de bala específico (a bala possui 2 filhos com cores e velocidades diferentemente).
Eu fiz o teste, consegui passar a bala para o slot, e consegui passar a bala do slot para a arma, mas na hora de atirar não funcionava, descobri o motivo e vou tentar explicar tudo aqui.
No meu código eu fiz o seguinte.
O slot possui uma variável para o tipo de bala, quando a bala colide com o slot ele altera algumas informações, a mais importante (neste caso) é o tipo.
Eu primeiro coloquei other.tipo = self
Isto está ok, mas para facilitar a leitura do código eu coloquei
Other.tipo = self.object_index
Porque eu vou precisar o objectivo Index no get name, então achei melhor usar aqui do que usar o .object_index dentro do get name.
Depois fiz na colisão entre o slot e a arma o mesmo processo, a arma possui uma variável chamada tipo.
No evento (você pode usar o instance place) de colisão do objeto slot com o objeto arma eu fiz o seguinte (de novo, só a parte mais importante)
Other.tipo = object_get_name(tipo);
Também deixei a arma carregada e dei uma carga para ela, mas aqui não tem segredo.
Aí na hora de atirar eu fiz o código de instanciar normalmente na arma
Var bala = instance_create_layer(x, y, layer, tipo) e não dava certo, o motivo: o retorno do get name é string! E a gente precisa de um comando! Entao antes de atirar eu criei outra variável e meu código ficou mais ou menos assim.
Var agora = asset_get_index(tipo);
Var bala = instance_create_layer(x, y, layer, agora)
E pronto, ele criou a bala que eu queria, cada uma com suas próprias características bonitinho.
O único problema que deu é que ao criar o tiro no slot usando o self.object_index eu permiti que ao destruir ele eu também ariscaria a deletar alguma outra bala, então é melhor colocar o object_index dentro do get name para evitar este problema.
Espero que tenha dado para entender.
Qualquer coisa é só falar que eu envio o projeto para você dar uma olhada.