[Trancado] Parar somente 1 instância de objeto

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

Resolvido [Trancado] Parar somente 1 instância de objeto

Mensagem por Cyberele em Qua 20 Fev 2013, 12:12

Boa tarde pessoal!

Estou fazendo um sistema de sinal de trânsito e estou usando o método distance_to_object para checar se o carro está próximo de um sinal vermelho e então fazer ele parar. Só que quando o sinal está fechado, todos os carros (mesmo os que estão muito longe do sinal) param. Gostaria de saber como posso fazer para resolver.

Vlw!


Última edição por Cyberele em Sex 22 Fev 2013, 15:56, editado 1 vez(es)

Cyberele

Número de Mensagens : 10
Data de inscrição : 02/01/2013
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Resolvido Re: [Trancado] Parar somente 1 instância de objeto

Mensagem por JOZ. em Qua 20 Fev 2013, 12:35

Em tese eu faia tal coisa dessa maneira:

Supomos que o nome do sinal é obj_sinal e o nome do carro é obj_carro e a ditância minima seria 64px:

Você teria que colocar isso no codigo do evento Step do obj_carro para controlar o movimento dele
Código:
if point_distance(x,y,obj_sinal.x,obj_sinal.y) < 64 parado = true
else parado = false

if parado = false {
    "código que faz o carro se mover"
}

Basicamente faria o carro parar quando estivesse perto do sinal.

Só não esquece de declarar a variavel parado no evento create.

JOZ.

Ranking : Nota B
Número de Mensagens : 333
Idade : 22
Data de inscrição : 15/11/2010
Notas recebidas : B - C - C - A - A - B - B - A - C - C - A
Reputação : 6
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 1
   : 0

http://jozgm.webnode.com.br/

Voltar ao Topo Ir em baixo

Resolvido Re: [Trancado] Parar somente 1 instância de objeto

Mensagem por Cyberele em Qua 20 Fev 2013, 14:31

Tentei também dessa maneira mas todas as instâncias do objeto carro continuam parando!

Cyberele

Número de Mensagens : 10
Data de inscrição : 02/01/2013
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Resolvido Re: [Trancado] Parar somente 1 instância de objeto

Mensagem por JOZ. em Qua 20 Fev 2013, 14:35

manda o gmk para eu ter ideia do que você está fazendo

JOZ.

Ranking : Nota B
Número de Mensagens : 333
Idade : 22
Data de inscrição : 15/11/2010
Notas recebidas : B - C - C - A - A - B - B - A - C - C - A
Reputação : 6
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 1
   : 0

http://jozgm.webnode.com.br/

Voltar ao Topo Ir em baixo

Resolvido Re: [Trancado] Parar somente 1 instância de objeto

Mensagem por Cyberele em Qua 20 Fev 2013, 14:39

Step da Faixa de pedestres:
Código:
if(distance_to_object(Carro) <=30) and (Sinal.sprite_index=SinalVermelho)
    Carro.vspeed=0;
else
    Carro.vspeed=4;

Cyberele

Número de Mensagens : 10
Data de inscrição : 02/01/2013
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Resolvido Re: [Trancado] Parar somente 1 instância de objeto

Mensagem por saim em Qua 20 Fev 2013, 16:30

Você realmente está mandando o objeto parar. Todas as intâncias são childs do objeto, então todas param. Você tem que pegar a instância e aplicar o código.
Isso pode ser feito a partir do objeto-faixa, usando o "with". Usando "with", você aplica o código dentro do objeto/instância colocada como argumento.
Aí, seu código poderia ficar assim:
Código:
if (Sinal.sprite_index=SinalVermelho){ // se o sinal está vermelho
with(carro){ // entra no carro e aplica o código dentro dos colchetes
if (distance_to_object(other) <= 30){ // se a distância é menor que 30
vspeed = 0; // pára
}
else{ // senão
vspeed = 4; //anda
}
}
}
O objeto "other", quando colocado dentro de uma declaração "with", significa "a instância em que o código está escrito".

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

Resolvido Re: [Trancado] Parar somente 1 instância de objeto

Mensagem por Cyberele em Sex 22 Fev 2013, 10:40

O código funcionou aqui Saim! Obrigada!

Mas só uma coisinha... E se eu quiser fazer parar outras instâncias de outros objetos "carro' diferentes?

Cyberele

Número de Mensagens : 10
Data de inscrição : 02/01/2013
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Resolvido Re: [Trancado] Parar somente 1 instância de objeto

Mensagem por saim em Sex 22 Fev 2013, 11:18

Tipo, se eles estiverem chegando, em fila, né? Você pode usar algum tipo de script recursivo. Scripts (ou códigos) recursivos, pra explicar em poucas palavras, são aqueles que chamam a si mesmos, criando um loop.

Tipo assim, você bota no script o nome "paraCarros". Aí, no script, coloca um teste pra ver se o carro está chegando (por exemplo, "se está numa distância menor que 30", ou coisa do tipo). Aí, se existir uma instância que atende à condição, manda essa instância rodar o script também.

Mas isso tem um problema. Dependendo da condição, pode acontecer de uma instância ficar achando a outra e vice-versa. Aí, já viu, o loop fica infinito e trava o computador inteiro. Uma forma de evitar isso é colocar uma variável que define se a instância já rodou o script. Ou usar alguma já existente. Por exemplo, se os carros pararem instantaneamente ou tiverem uma aceleração que fica negativa, você pode verificar se a velocidade é diferente de zero ou se a aceleração é maior que zero e só rodar o script nesses casos.

Exemplo:
script paraCarros
Código:
// esse script só será chamado se o carro estiver parando
with (carro){
if (distance_to_object(other) <= 30 && acceleration >= 0){
acceleration = -3; // aqui ele impede que outras instâncias o encontrem, depois E começa a parar
paraCarros(); // aqui ele roda o script também!
}
}


Última edição por saim em Sex 22 Fev 2013, 14:28, editado 1 vez(es)

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

Resolvido Re: [Trancado] Parar somente 1 instância de objeto

Mensagem por Super Maker em Sex 22 Fev 2013, 13:45

Entenda da seguinte forma: se você está tentando controlar um evento de uma instância que é criada durante o jogo, você deve busca o acesso a ela através do objeto pai.
Exenplo:
Código:
with(pai.filho_1){
    //controlar o evento aqui
}
Mas, primeiro claro, deve ser checado se ele existe.
Não leve ao pé da letra e no seu caso, me parece que o objeto pai é o carro.

Super Maker

Número de Mensagens : 646
Idade : 33
Data de inscrição : 09/07/2011
Reputação : 6
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Resolvido Re: [Trancado] Parar somente 1 instância de objeto

Mensagem por Cyberele em Sex 22 Fev 2013, 15:55

Muito obrigada pessoal, tudo resolvido!

Cyberele

Número de Mensagens : 10
Data de inscrição : 02/01/2013
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Resolvido Re: [Trancado] Parar somente 1 instância de objeto

Mensagem por Conteúdo patrocinado Hoje à(s) 18: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