Conectar-se
Quem está conectado
35 usuários online :: 4 usuários cadastrados, Nenhum Invisível e 31 Visitantes

Akutarex9, Ismaelgames7, Koelho, Thiago_o_programador

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
Data de inscrição : 02/01/2013
Número de Mensagens : 10
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Ver perfil do usuário

[Trancado] Parar somente 1 instância de objeto

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)
avatar
Ranking : Nota B
Notas recebidas : B - C - C - A - A - B - B - A - C - C - A
Data de inscrição : 15/11/2010
Número de Mensagens : 333
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0

Prêmios
   : 0
   : 1
   : 0
Ver perfil do usuáriohttp://jozgm.webnode.com.br/

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

em Qua 20 Fev 2013, 12:35
Reputação da mensagem: 100% (1 votos)
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.
avatar
Data de inscrição : 02/01/2013
Número de Mensagens : 10
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Ver perfil do usuário

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

em Qua 20 Fev 2013, 14:31
Tentei também dessa maneira mas todas as instâncias do objeto carro continuam parando!
avatar
Ranking : Nota B
Notas recebidas : B - C - C - A - A - B - B - A - C - C - A
Data de inscrição : 15/11/2010
Número de Mensagens : 333
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0

Prêmios
   : 0
   : 1
   : 0
Ver perfil do usuáriohttp://jozgm.webnode.com.br/

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

em Qua 20 Fev 2013, 14:35
manda o gmk para eu ter ideia do que você está fazendo
avatar
Data de inscrição : 02/01/2013
Número de Mensagens : 10
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Ver perfil do usuário

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

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;
avatar
Ranking : Nota B
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Número de Mensagens : 2964
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0

Prêmios
   : 1
   : 0
   : 3
Ver perfil do usuário

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

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".
avatar
Data de inscrição : 02/01/2013
Número de Mensagens : 10
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Ver perfil do usuário

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

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?
avatar
Ranking : Nota B
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Número de Mensagens : 2964
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0

Prêmios
   : 1
   : 0
   : 3
Ver perfil do usuário

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

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)
avatar
Data de inscrição : 09/07/2011
Número de Mensagens : 646
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

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

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.
avatar
Data de inscrição : 02/01/2013
Número de Mensagens : 10
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Ver perfil do usuário

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

em Sex 22 Fev 2013, 15:55
Muito obrigada pessoal, tudo resolvido!
Ver o tópico anteriorVoltar ao TopoVer o tópico seguinte
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum