GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» Como ajustar velocidade de cada frame da animação no game maker
por Ralphed Ontem à(s) 18:28

» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07

» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45

» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51

» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31

» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11

» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39

» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30

» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17

» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18

» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34

» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13

» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18

» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12

» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02

» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55

» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42

» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56

» Alguém aqui já ganha dinheiro com seus games?
por Joton Seg 15 Jan 2024, 16:49

» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21

» como aumentar o obj sem aumentar a colisão??
por GabrielXavier Qua 10 Jan 2024, 07:21

» Asteroid Core - Early Acesse Update [0.2.0.0]
por JOZ. Seg 08 Jan 2024, 14:39

» Versionamento de código com GitHub
por GabrielXavier Seg 08 Jan 2024, 07:32

» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por kolesovsup Sex 29 Dez 2023, 07:16


Mover para ponto mais proximo : preferencia

5 participantes

Ir para baixo

Mover para ponto mais proximo : preferencia Empty Mover para ponto mais proximo : preferencia

Mensagem por Zero. Qua 27 Abr 2011, 13:31

Bem em meu jogo a criatura se move para comer a comida(objeto) mais proximo e uso desta forma :

if distance_to_object(obj_lipid or obj_glico or obj_amino)
with instance_nearest(x,y,obj_lipid) { other.speed=1;
other.direction=point_direction(other.x,other.y,x,y) }

with instance_nearest(x,y,obj_glico) { other.speed=1;
other.direction=point_direction(other.x,other.y,x,y) }

with instance_nearest(x,y,obj_amino) { other.speed=1;
other.direction=point_direction(other.x,other.y,x,y) }

todos os 3 objs sao comidas.
entao oq acontece é o seguinte:
a criatura da preferencia ao obj_amino por ele ter sido colocado por ultimo ou seja se tiver um lipidio ou um glico mais proximo dele e um amino mais longe ele vai atras do amino --' entendem?

então como fazer para ele seguir o mais proximo independe de qual seja ?

Obg ai xD
Zero.
Zero.

Data de inscrição : 19/08/2010
Reputação : 47
Número de Mensagens : 1300
Prêmios : Mover para ponto mais proximo : preferencia Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

Mover para ponto mais proximo : preferencia Empty Re: Mover para ponto mais proximo : preferencia

Mensagem por Carlos L. Qua 27 Abr 2011, 14:11

Opa beleza tenta fazer algo mais ou menos assim.
Código:
d[1] = distance_to_object(object1);
d[2] = distance_to_object(object2);
d[3] = distance_to_object(object3);
o1xx = object1.x;
o2xx = object2.x;
o3xx = object3.x;
o1yy = object1.y;
o2yy = object2.y;
o3yy = object3.y;

if (d[1]) < d[2] && d[3] then
{
    move_towards_point(o1xx,o1yy,3);
}
if (d[2]) < d[1] && d[3] then
{
    move_towards_point(o2xx,o2yy,3);
}
if (d[3]) < d[1] && d[2] then
{
    move_towards_point(o3xx,o3yy,3);
}
Obs: Não testei esse código. flw
Carlos L.
Carlos L.

Games Ranking : Nota C

Notas recebidas : C
Data de inscrição : 26/09/2010
Reputação : 8
Número de Mensagens : 271
Prêmios : Mover para ponto mais proximo : preferencia Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

Mover para ponto mais proximo : preferencia Empty Re: Mover para ponto mais proximo : preferencia

Mensagem por Zero. Qua 27 Abr 2011, 14:19

n entendi nada *---*
se podesse explicar e usar os obj que uso ficaria mais claro
Zero.
Zero.

Data de inscrição : 19/08/2010
Reputação : 47
Número de Mensagens : 1300
Prêmios : Mover para ponto mais proximo : preferencia Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

Mover para ponto mais proximo : preferencia Empty Re: Mover para ponto mais proximo : preferencia

Mensagem por Carlos L. Qua 27 Abr 2011, 14:48

Opa amigo não tem segredo, presta atenção.
Código:
d[1] = distance_to_object(obj_lipid);
d[2] = distance_to_object(obj_glico);
d[3] = distance_to_object(obj_amino);
o1xx = obj_lipid.x;
o2xx = obj_glico.x;
o3xx = obj_amino.x;
o1yy = obj_lipid.y;
o2yy = obj_glico.y;
o3yy = obj_amino.y;
Nessa Parte eu simplesmente armazenei o valor das funções.
Código:
if (d[1]) < d[2] && d[3] then // se a distancia do obj_lipid for menor que a do obj_glico e obj_amino faça algo.
{
    move_towards_point(o1xx,o1yy,3);
}
if (d[2]) < d[1] && d[3] then
{
    move_towards_point(o2xx,o2yy,3);
}
if (d[3]) < d[1] && d[2] then
{
    move_towards_point(o3xx,o3yy,3);
}
E nessa parte mandei ele ir para o objeto que estiver mais próximo, não tem segredo.

Obs :. Você está fazendo alguma coisa relacionado com biologia certo.
Código:
obj_lipid = Lipidio;
obj_glico = Glicose;
obj_amino = Aminoacido.
flw
Carlos L.
Carlos L.

Games Ranking : Nota C

Notas recebidas : C
Data de inscrição : 26/09/2010
Reputação : 8
Número de Mensagens : 271
Prêmios : Mover para ponto mais proximo : preferencia Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

Mover para ponto mais proximo : preferencia Empty Re: Mover para ponto mais proximo : preferencia

Mensagem por Willy Qua 27 Abr 2011, 14:56

Deu bastante trabalho, mas consegui o que você quer!
Coloque isso no step do objeto que vai comer:
Código:
lipid=instance_nearest(x,y,obj_lipid)
glico=instance_nearest(x,y,obj_glico)
amino=instance_nearest(x,y,obj_amino)
Aqui sabemos qual “lipid” esta mais perto, qual “glico” esta mais perto e também o “amino” que esta mais perto.

Código:
alvo_1=distance_to_object(lipid)
alvo_2=distance_to_object(glico)
alvo_3=distance_to_object(amino)
Aqui estamos pegando a distancia dos objetos para que possamos saber qual deles está mais perto e assim fazer o comilão encher a pança.

Até agora já sabemos qual são as comidas próximas e a distancia delas do faminto.
Agora, vamos fazer o código saber qual das três refeições está mais próxima:
Código:
mais_perto=min(alvo_1,alvo_2,alvo_3)
Nesse código, usamos a função min para saber qual esta mais próximo, usando como valores a distancia das comidas.

E finalmente, vamos descobrir qual comida a criatura vai seguir:
Código:
if mais_perto=alvo_1{
alvo=lipid
}else if mais_perto=alvo_2{
alvo=glico
}else if mais_perto=alvo_3{
alvo=amino
}
Checamos qual é o valor mais próximo, logo, definimos qual será o nosso “alvo”.

Agora tudo que tem que fazer é criar o código para fazer a criatura faminta ir atrás da comida. Usarei algo simples apenas para testar.
Código:
move_towards_point(alvo.x,alvo.y,3)
Isso faz o objeto seguir o seu alvo, que no caso, é o que estiver mais perto do jogador. Não é necessário declarar nenhuma variável, mas se preferir, use! Use “alvo.x” e “alvo.y” para determinar a direção do objeto.

Espero ter ajudado!
blz
Willy
Willy

Games Ranking : Nota A

Notas recebidas : C + B + A + A
Data de inscrição : 08/06/2009
Reputação : 264
Número de Mensagens : 1890
Prêmios : Mover para ponto mais proximo : preferencia Empty

Medalhas x 0 Tutoriais x 2 Moedas x 0

Ouro x 2 Prata x 1 Bronze x 1

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

http://willy-gmbr.blogspot.com/

Ir para o topo Ir para baixo

Mover para ponto mais proximo : preferencia Empty Re: Mover para ponto mais proximo : preferencia

Mensagem por Zero. Qua 27 Abr 2011, 15:09

Kkkkkkkkk' Achei uma forma MTOO!! MAIS FACIL xD

Olha nem precisa destes codigos tudo ai kk'

if distance_to_object(obj_lipid)<200 or
distance_to_object(obj_glico)<200 or
distance_to_object(obj_amino)<200{
if distance_to_object(obj_lipid)and distance_to_object(obj_lipid){with instance_nearest(x,y,obj_lipid) { other.speed=1;
other.direction=point_direction(other.x,other.y,x,y) }}

if distance_to_object(obj_glico)and distance_to_object(obj_glico){with instance_nearest(x,y,obj_glico) { other.speed=1;
other.direction=point_direction(other.x,other.y,x,y) }}

if distance_to_object(obj_amino)and distance_to_object(obj_amino){with instance_nearest(x,y,obj_amino) { other.speed=1;
other.direction=point_direction(other.x,other.y,x,y) }}}


pra mim assim ficou bem mais simple xD
Zero.
Zero.

Data de inscrição : 19/08/2010
Reputação : 47
Número de Mensagens : 1300
Prêmios : Mover para ponto mais proximo : preferencia Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

Mover para ponto mais proximo : preferencia Empty Re: Mover para ponto mais proximo : preferencia

Mensagem por vinians Qua 27 Abr 2011, 15:11

Observei os codigos acima e verifiquei que funcionam. Porém caso haja mais de um destes objetos, você nao pode se referir com o nome do objeto diretamente como obj_glico, assim pra funcionar em qualquer numero de objetos fica assim:
Código:

in = noone; //instancia a procurar
d  = 9999999;  //valor alto de inicializacao
//Verifica qual o objeto mais perto dentre os quais vc precisa
with (all)
{
    if (object_index == obj_lipid or object_index == obj_glico or object_index == obj_amino)
    {
            if (distance_to_point(other.x, other.y) < other.d)
            {
                  other.d = distance_to_point(other.x, other.y);
                  other.in = id;
            }
    } 
}
if (in != noone)
{
  move_towards_point(in.x, in.y, 2); //Move para o objeto caso ele tenha sido encontrado
}
Basicamente seria isso ai!
Flws
vinians
vinians

Games Ranking : Nota B

Notas recebidas : B-C-A-C
Data de inscrição : 18/09/2008
Reputação : 90
Número de Mensagens : 2715
Prêmios : Mover para ponto mais proximo : preferencia Empty

Medalhas x 0 Tutoriais x 1 Moedas x 0

Ouro x 0 Prata x 2 Bronze x 1

Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Plataformas :
  • Game Maker 8.0 ou 8.1
  • Game Maker Studio 1.4
  • Game Maker Studio 2.0
  • Construct 2
  • Java
  • C#
  • Javascript
  • C ou C++
  • Outros


https://vinians.itch.io

Ir para o topo Ir para baixo

Mover para ponto mais proximo : preferencia Empty Re: Mover para ponto mais proximo : preferencia

Mensagem por Zero. Qua 27 Abr 2011, 15:26

Não eu colekei varios objetos e deu tudo certo e não ira haver mais de 3 tipos de comida para esta criatura não

Como não estou conseguindo postar umn novo topico vou perguntar poraqui msm :
Decimais
Olha se eu tiro 0.50 de dano em um bixo e eu ataco de novo e tiro 0.50 de dano o dano total sera de 1.00 mas no GM n aparece 1.00 e sim 1 quero que apareça 1.00 tem como ?

obg xD

mais uma coisa esta msm criatura ela aumenta o nivel de co2 em 0.50% e o obj que define que esta variavel(global.co2) existe não funciona é como se esta criatura aumentasse o nivel de co2 em 0.50% antes do outro obj declarar que ela exista ajuda ai nisso tb xD vo ir tentando aqui
( o erro que ocorre é unknow variable co2 --' )
Zero.
Zero.

Data de inscrição : 19/08/2010
Reputação : 47
Número de Mensagens : 1300
Prêmios : Mover para ponto mais proximo : preferencia Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

Mover para ponto mais proximo : preferencia Empty Re: Mover para ponto mais proximo : preferencia

Mensagem por saim Qua 27 Abr 2011, 16:12

Pra 1.00, acho que você procura pela função "string_format".
Quanto ao co2, se ele é global sem ter sido declarado como globalvar, SEMPRE será necessário usar o "global.", antes.
saim
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : Mover para ponto mais proximo : preferencia Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

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

Ir para o topo Ir para baixo

Mover para ponto mais proximo : preferencia Empty Re: Mover para ponto mais proximo : preferencia

Mensagem por Zero. Qua 27 Abr 2011, 16:35

sim eu sempre uso mas msm assim não funciona *---*
como usar string format ?
Zero.
Zero.

Data de inscrição : 19/08/2010
Reputação : 47
Número de Mensagens : 1300
Prêmios : Mover para ponto mais proximo : preferencia Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

Mover para ponto mais proximo : preferencia Empty Re: Mover para ponto mais proximo : preferencia

Mensagem por vinians Qua 27 Abr 2011, 16:46

saim escreveu:Pra 1.00, acho que você procura pela função "string_format".
Quanto ao co2, se ele é global sem ter sido declarado como globalvar, SEMPRE será necessário usar o "global.", antes.
Não necessariamente. Nas versões mais novas do Game Maker, a partir da 7 se não me engano, você pode usar
Código:

globalvar xxxx;
Onde xxx é a variável global, assim não há necessidade de usar global.xxxx, ou seja o GM vai trata-la como global a partir daquela declaração.
@Topico
Use string_format como o nosso amigo saim disse acima. Exemplo:
Código:

draw_text(x, y, string_format(valor, 5, 2)); //mostra com duas casas decimais num total de 5 digitos.
Flws!
vinians
vinians

Games Ranking : Nota B

Notas recebidas : B-C-A-C
Data de inscrição : 18/09/2008
Reputação : 90
Número de Mensagens : 2715
Prêmios : Mover para ponto mais proximo : preferencia Empty

Medalhas x 0 Tutoriais x 1 Moedas x 0

Ouro x 0 Prata x 2 Bronze x 1

Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Plataformas :
  • Game Maker 8.0 ou 8.1
  • Game Maker Studio 1.4
  • Game Maker Studio 2.0
  • Construct 2
  • Java
  • C#
  • Javascript
  • C ou C++
  • Outros


https://vinians.itch.io

Ir para o topo Ir para baixo

Mover para ponto mais proximo : preferencia Empty Re: Mover para ponto mais proximo : preferencia

Mensagem por saim Qua 27 Abr 2011, 16:52

Ô, vinians, foi o que eu disse. Razz "...se ele é global sem ter sido declarado como globalvar..."
kiklin123, os dois objetos fazem as ações descritas no create event? Se for o caso, pode ser mesmo que um esteja aumentando uma variável que o outro ainda não criou. Se não for, vou te pedir pra mostrar o código de declaração da variável e de aumento, com o evento em que ocorrem.


Última edição por saim em Qua 27 Abr 2011, 16:55, editado 1 vez(es)
saim
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : Mover para ponto mais proximo : preferencia Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

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

Ir para o topo Ir para baixo

Mover para ponto mais proximo : preferencia Empty Re: Mover para ponto mais proximo : preferencia

Mensagem por Zero. Qua 27 Abr 2011, 16:53

VLW ! xD
Resolvido tudo ai!
Zero.
Zero.

Data de inscrição : 19/08/2010
Reputação : 47
Número de Mensagens : 1300
Prêmios : Mover para ponto mais proximo : preferencia Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

Mover para ponto mais proximo : preferencia Empty Re: Mover para ponto mais proximo : preferencia

Mensagem por vinians Qua 27 Abr 2011, 17:01

saim escreveu:Ô, vinians, foi o que eu disse. Razz "...se ele é global sem ter sido declarado como globalvar..."
kiklin123, os dois objetos fazem as ações descritas no create event? Se for o caso, pode ser mesmo que um esteja aumentando uma variável que o outro ainda não criou. Se não for, vou te pedir pra mostrar o código de declaração da variável e de aumento, com o evento em que ocorrem.
Puxa é mesmo amigão! Isso é que dá ler tudo rapido demais Very Happy
@Topico
Como foi resolvido, tópico trancado.

vinians
vinians

Games Ranking : Nota B

Notas recebidas : B-C-A-C
Data de inscrição : 18/09/2008
Reputação : 90
Número de Mensagens : 2715
Prêmios : Mover para ponto mais proximo : preferencia Empty

Medalhas x 0 Tutoriais x 1 Moedas x 0

Ouro x 0 Prata x 2 Bronze x 1

Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Plataformas :
  • Game Maker 8.0 ou 8.1
  • Game Maker Studio 1.4
  • Game Maker Studio 2.0
  • Construct 2
  • Java
  • C#
  • Javascript
  • C ou C++
  • Outros


https://vinians.itch.io

Ir para o topo Ir para baixo

Mover para ponto mais proximo : preferencia Empty Re: Mover para ponto mais proximo : preferencia

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos