Parar event depois de rodar uma vez

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

Parar event depois de rodar uma vez

Mensagem por Nimsay em Qua 24 Abr 2013, 17:48

O player perde pontos e vida quando colide com o inimigo. Porém, como o inimigo não morre nessa colisão, a contagem de pontos e vidas vai diminuindo gradativamente enquanto os dois objetos ainda estão encostados. Ou seja, ao invés de perder apenas cem pontos e uma vida, o player acaba perdendo oitocentos pontos e oito vidas.
Preciso de uma ajuda para que o event pare de rodar depois que tira os cem pontos e uma vida, de modo que não fique em loop, tirando vários pontos e vidas. Lembrando que esse event deve voltar a rodar quando outra instância do objeto inimigo for criada.

Valeu!

Nimsay

Número de Mensagens : 7
Data de inscrição : 24/04/2013
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Parar event depois de rodar uma vez

Mensagem por RafaelCazarotto em Qua 24 Abr 2013, 20:22

é só usar uma variavel, vou tentar fazer aqui de cabeça
no create do player poem assim:
dano=false
na colisão poem assim
if dano=false
{
//aqui vc poem as ações de perder vida e etc...
alarm[0]=10//aqui pode trocar o valor de 10 para o tempo que vc quiser que ele tenha um intervalo de tempo para dar o dano de novo
dano=true
}
no evento de alarm 0 vc poem assim
if dano=true
{
dano=false
}

pronto testa lá e veja se da certo Smile

RafaelCazarotto

Ranking : Nota C
Número de Mensagens : 564
Idade : 18
Data de inscrição : 15/03/2012
Notas recebidas : D-D-D-C-C-B
Reputação : 13
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

Voltar ao Topo Ir em baixo

Re: Parar event depois de rodar uma vez

Mensagem por saim em Qui 25 Abr 2013, 09:49

OU você pode armazenar o valor da instância colidida numa variável, de forma que assim que terminar a colisão - e só quando terminar a colisão - ele possa voltar a colidir com a mesma instância.
Assim:
>create<
Código:
colide_com = noone; // não colide com ninguém, no começo
>colisão<
Código:
if (other.id != colide_com){ // se ainda não está colidindo com a instância em questão
colide_com = other; // passa a estar colidindo com ela
// perde pontos, vida, etc.
}
>step< (infelizmente, será preciso o uso do step)
Código:
if (colide_com != noone){ // se existe alguém em colisão
if (!place_meeting(x, y, colide_com)){ // e não estou mais colidindo com esse alguém
colide_com = noone; // passo a não estar colidindo com ninguém
}
}

"E se eu estiver colidindo com duas instâncias ao mesmo tempo?"
Aí, lascou. O valor de colide_com vai ficar mudando e a verificação sempre vai dar que não é aquela instância, causando o mesmo erro que você está experimentando (mas com o dobro da potência). Mas tem como contornar, com arrays. Existe essa possibilidade?

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: Parar event depois de rodar uma vez

Mensagem por Nimsay em Qui 25 Abr 2013, 10:18

[RAFAEL]
Coloquei o que passou no objeto player, mas não funcionou. Tô com um pouco de dificuldade para trabalhar com variáveis booleanas dentro do game maker, não acho onde criá-las. Basta escrever em uma linha de código, como fez com "dano=false", que ele já reconhece como uma variável, ou precisa de algo mais?


[SAIM]
Coloquei esses códigos no objeto player, em linhas de código, mas não deu certo. Mudei "other" e "other.id" para os nomes do player e do inimigo, mas não deu certo também. Tem que mudar alguma outra coisa?
Essa questão de colidir com duas instâncias ao mesmo tempo acho que vai ser difícil acontecer, pois estou usando o "test chance" para criar os inimigos, com um espaço de 7 steps para (tentar) fazer com que não hajam dois inimigos na mesma posição simultaneamente.


Valeu, gente!

Nimsay

Número de Mensagens : 7
Data de inscrição : 24/04/2013
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Parar event depois de rodar uma vez

Mensagem por RafaelCazarotto em Qui 25 Abr 2013, 12:56

eu posso fazer uma engine depois, é que agora to no cel hehehe mas é o seguinte a variavel se nao for global ela tenque ser inicializada, eu uso o Create do objeto para inicializar a variavel, e só coloco o valor que vc quer que ela comece como por exemplo dano=false ae depois ja pode alterar o valor da variavel sem problemas Smile, sobre a engine, vc quer como? é só que o player colida com o monstro e o player nao fique perdendo vida isso?
flw

RafaelCazarotto

Ranking : Nota C
Número de Mensagens : 564
Idade : 18
Data de inscrição : 15/03/2012
Notas recebidas : D-D-D-C-C-B
Reputação : 13
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

Voltar ao Topo Ir em baixo

Re: Parar event depois de rodar uma vez

Mensagem por Nimsay em Qui 25 Abr 2013, 13:18

Entendi! Agora deu certo!
Usei "set variable" e "test variable", mas eu precisei verificar duas vezes se a variável é igual a false: uma vez pra tirar pontos e uma vez pra tirar vidas.

Valeu mesmo pelo help!
(:

Nimsay

Número de Mensagens : 7
Data de inscrição : 24/04/2013
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Parar event depois de rodar uma vez

Mensagem por RafaelCazarotto em Qui 25 Abr 2013, 13:56

Ok entao ;) qualquer coisa eh soh pedir Smile

RafaelCazarotto

Ranking : Nota C
Número de Mensagens : 564
Idade : 18
Data de inscrição : 15/03/2012
Notas recebidas : D-D-D-C-C-B
Reputação : 13
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

Voltar ao Topo Ir em baixo

Re: Parar event depois de rodar uma vez

Mensagem por Nimsay em Qui 25 Abr 2013, 13:59

Ok, valeu! (:

Nimsay

Número de Mensagens : 7
Data de inscrição : 24/04/2013
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Parar event depois de rodar uma vez

Mensagem por saim em Sex 26 Abr 2013, 08:02

Nimsay escreveu:Basta escrever em uma linha de código, como fez com "dano=false", que ele já reconhece como uma variável, ou precisa de algo mais?
Isso basta. O game maker não é mágico? Smile
Mas existem exceções, casos específicos, etc. Tem um tutorial sobre variáveis no game maker na minha assinatura. Nele, eu me aprofundo um pouco mais no assunto.
Nimsay escreveu:Coloquei esses códigos no objeto player, em linhas de código, mas não deu certo. Mudei "other" e "other.id" para os nomes do player e do inimigo, mas não deu certo também. Tem que mudar alguma outra coisa?
Não, era pra funcionar... O que aconteceu de errado? (só de curiosidade; se já está resolvido, não precisa mudar nada)
Nimsay escreveu:Essa questão de colidir com duas instâncias ao mesmo tempo acho que vai ser difícil acontecer, pois estou usando o "test chance" para criar os inimigos, com um espaço de 7 steps para (tentar) fazer com que não hajam dois inimigos na mesma posição simultaneamente.
Cuidado com esse "tentar"... Se a probabilidade for muito pequena de acontecer, ainda assim vai acontecer na hora que você estiver mostrando o jogo pra namorada. GARANTA que não vai acontecer. Por exemplo, dê a todos inimigos uma velocidade constante que não pode ser afetada por mais nada do jogo e faça com que essa velocidade impossibilite o contato com o próximo inimigo criado, em função do espaço de tempo (mínimo) entre suas criações. Aí, sim, você terá certeza que não haverão dois inimigos no mesmo lugar ao mesmo tempo.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: Parar event depois de rodar uma vez

Mensagem por Nimsay em Sex 26 Abr 2013, 10:15

Beleza, vou dar uma olhada mais tarde!

Não lembro bem qual era, mas apareceu uma mensagem de erro quando gerei o executável. Tentei com as variáveis e deu certo, então não cheguei a ficar em cima do código tentando ver porque não funcionou.

HAHAHAHAHAHAHHAH, beleza! Todos os objetos já estão com velocidades constantes e os inimigos são criados a partir de um objeto que se movimenta pela tela, então não tem mesmo como sairem um atrás do outro mesmo que o "test chance" crie eles meio seguidos.

Valeu pela ajuda!
(:

Nimsay

Número de Mensagens : 7
Data de inscrição : 24/04/2013
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Parar event depois de rodar uma vez

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


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