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
» Problema ao entrar por uma porta e voltar por ela
por aminaro Ontem à(s) 10:08

» Alguém aqui já ganha dinheiro com seus games?
por theguitarmester Ter 30 Abr 2024, 11:43

» Colisões não funcionando
por theguitarmester Ter 30 Abr 2024, 10:16

» Como ajustar velocidade de cada frame da animação no game maker
por pequetux Sex 26 Abr 2024, 16:45

» Preciso de ajuda
por AftonDuGrau Dom 21 Abr 2024, 20:18

» Como faz o evento drawn GUI, não se repetir?
por aminaro Sex 19 Abr 2024, 20:30

» 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

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


[Resolvido] path_direction - como fazer?

4 participantes

Ir para baixo

[Resolvido] path_direction - como fazer? Empty [Resolvido] path_direction - como fazer?

Mensagem por saim Ter 20 Mar 2012, 10:54

Eu tive uma idéia mágica pra resolver o problema da classificação num jogo de corridas. Seria ótimo, se funcionasse, mas eu não consigo fazer funcionar.

Ela funcionaria da seguinte forma:
1 - primeiro, eu faço um path pra ser o eixo da pista. Comece com o path seguindo da esquerda pra direita, em linha reta, pra entender a idéia, que nesse caso específico, ela funciona. Coloque um objeto (vou chamá-lo de objSeguePath) e, no create desse objeto, mande ele seguir o path com velocidade zero.
create:
Código:
path_start(path_reto, 0, 0, 0);
2 - crie um segundo objeto pra ser o carro (vou chamá-lo de objCarro) e defina, no create, algumas variáveis pra ser a direção e a velocidade. Vou chamá-las de "lado" e "velo". Pra facilitar minha vida, essas variáveis estão globais, mas depois, quando estiver tudo funcionando elas serão locais. Ainda nesse objeto, crie um step event pra ele andar em função dessas variáveis.
create:
Código:
globalvar lado, velo;
lado = 0; velo = 0;
antiHorario = vk_left; horario = vk_right; acelera = vk_up
step:
Código:
lado += 10 * (keyboard_check(antiHorario) - keyboard_check(horario));
velo = 3 * keyboard_check(acelera);
Agora o pulo do gato:
3 - de volta ao primeiro objeto (objSeguePath), defina o valor de path_speed em função da projeção da movimentação do carro no path que define o traçado da pista. Teoricamente, isso vai te colocar numa posição proporcional ao caminho percorrido pelo carro e, quando tivermos mais carros na mesma pista, fazendo a mesma coisa, isso vai te permitir usar a variável path_position pra comparar sua posição com a dos outros.
step:
Código:
path_speed = lengthdir_x(velo, lado);
lembrando que o path está na horizontal, o lengthdir_x vai me dar a projeção da movimentação do objCarro

E, olha que lindo, funciona! Agora, falta fazer funcionar em qualquer direção. Ora, isso é fácil, basta reduzir a direção do path a zero e reaplicar a mesma teoria!
correção do step:
Código:
path_speed = lengthdir_x(velo, lado - path_direction(path_position));
Ao reduzir a path direction do ponto em que o objeto está, o código fica equivalente ao anterior, com o path na horizontal

Agora começam os problemas. Pra começar, não existe a função path_direction. Até tentei usar a direção do movimento:
Código:
path_direction = point_direction(path_get_x(path_positionprevious), path_get_y(path_positionprevious), path_get_x(path_position), path_get_y(path_position));
Mas isso gerou uma série de problemas:
- Quando o movimento é no sentido inverso ao do fluxo normal, o objeto fica tremendo, porque a direção do path fica oscilando entre "igual à movimentação do objeto" e "inversa à movimentação do objeto", já que quando está "igual à movimentação do objeto", o path_speed resultante é positivo e, por conseqüência, o objSeguePath anda PRA FRENTE.
- No normal step event, path_position é igual à path_position_previous, o que me obriga a usar o end step event, o que não seria ruim se não fosse o delay de um step entre os dois objetos.
- Mesmo usando o end step, quando o carro pára (velo == 0), a direção da posição anterior para a nova é sempre zero, não importa qual seja a realidade.
- Curvas têm uma precisão medíocre, quando se usa esse tipo de código.

Então tenho essas perguntinhas simples:
- Como criar uma função (script) "path_direction", que sempre aponte pra direção positiva do path, em função da path_position, seja qual for a path_position?
- Como fazer isso funcionar em qualquer step event (begin, normal ou end)?
- Enfim, como fazer um sistema decente de posicionamento na corrida?


Última edição por saim em Ter 20 Mar 2012, 15:38, 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 : [Resolvido] path_direction - como fazer? 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

[Resolvido] path_direction - como fazer? Empty Re: [Resolvido] path_direction - como fazer?

Mensagem por jharik Ter 20 Mar 2012, 11:03

para que serve isso
jharik
jharik

Data de inscrição : 19/03/2012
Reputação : 1
Número de Mensagens : 25
Prêmios : [Resolvido] path_direction - como fazer? 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

[Resolvido] path_direction - como fazer? Empty Re: [Resolvido] path_direction - como fazer?

Mensagem por Mart10carado Ter 20 Mar 2012, 11:10

jharik escreveu:para que serve isso

Esse assunto e para programadores intermediário para avançado.Ate eu que sou intermediário tenho que ler 3 vezes ou mais para emtender [Resolvido] path_direction - como fazer? 71423
Mart10carado
Mart10carado

Data de inscrição : 27/05/2011
Reputação : 0
Número de Mensagens : 134
Prêmios : [Resolvido] path_direction - como fazer? 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

[Resolvido] path_direction - como fazer? Empty Re: [Resolvido] path_direction - como fazer?

Mensagem por saim Ter 20 Mar 2012, 11:42

jharik escreveu:para que serve isso
saim escreveu:isso vai te permitir usar a variável path_position pra comparar sua posição com a dos outros.
É pra definir, num jogo de corrida, quem está ganhando a corrida.

Mart10carado escreveu:
jharik escreveu:para que serve isso

Esse assunto e para programadores intermediário para avançado.Ate eu que sou intermediário tenho que ler 3 vezes ou mais para emtender [Resolvido] path_direction - como fazer? 71423
Na verdade, nem é tão avançado assim. Só que pra entender a pergunta, o sujeito tem que saber o que eu estou pensando, não é um raciocínio MUITO comum. Por isso o post ficou tão longo. Resumidamente, eu preciso saber a direção do path em função da posição no path. O resto é "o-que-eu-já-fiz-e-deu-errado".
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 : [Resolvido] path_direction - como fazer? 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

[Resolvido] path_direction - como fazer? Empty Re: [Resolvido] path_direction - como fazer?

Mensagem por Kabeção Ter 20 Mar 2012, 12:37

- Como criar uma função (script) "path_direction", que sempre aponte pra direção positiva do path, em função da path_position, seja qual for a path_position?
- Como fazer isso funcionar em qualquer step event (begin, normal ou end)?
As posições da path são definidas depois do End Step (ou seria antes do Begin Step?), então você deve calcular a direção no Draw.

Enfim, como fazer um sistema decente de posicionamento na corrida?
Eu já tentei algo usando collision_line para cada pixel da path, ai num obj_path eu percorria todas as posições dela com collision_lines...
Não parece um método muito apropriado mas isso facilita bastante pois o movimento do carro pode ser livre sem calcular nada relativo a path.
Kabeção
Kabeção

Games Ranking : Sem avaliações

Data de inscrição : 08/06/2008
Reputação : 100
Número de Mensagens : 2314
Prêmios : [Resolvido] path_direction - como fazer? Empty

Medalhas x 0 Tutoriais x 7 Moedas x 0

Ouro x 3 Prata x 0 Bronze x 1

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

http://blackcapapps.blogspot.com.br/

Ir para o topo Ir para baixo

[Resolvido] path_direction - como fazer? Empty Re: [Resolvido] path_direction - como fazer?

Mensagem por saim Ter 20 Mar 2012, 14:04

Kabeção escreveu:As posições da path são definidas depois do End Step (ou seria antes do Begin Step?), então você deve calcular a direção no Draw.
Manual traduzido escreveu:Em algumas situações é importante para compreender a ordem os processos de eventos
do Game Maker. É a seguinte:
• Begin step events
• Alarm events
• Keyboard, Key press, e Key release events
• Mouse events
• Normal step events
(agora todos as instâncias são definidas para suas novas posições)
• Collision events
• End step events
• Draw events
Na verdade, entre o normal step e o end step, por isso usei o end step. Mas eu estava pensando em algo mais imediato, alguma equação pra usar no create que me desse o ângulo de qualquer path_position, nem que usasse uma interpolação.

Kabeção escreveu:Eu já tentei algo usando collision_line para cada pixel da path, ai num obj_path eu percorria todas as posições dela com collision_lines...
Não parece um método muito apropriado mas isso facilita bastante pois o movimento do carro pode ser livre sem calcular nada relativo a path.
Já pensei nisso, mas pra fazer as linhas perpendiculares à pista, você vai precisar da inclinação da pista (que pode, inclusive, ter circuitos circulares), o que nos leva de volta ao primeiro problema.
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 : [Resolvido] path_direction - como fazer? 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

[Resolvido] path_direction - como fazer? Empty Re: [Resolvido] path_direction - como fazer?

Mensagem por Kabeção Ter 20 Mar 2012, 14:45

Na verdade, entre o normal step e o end step, por isso usei o end step. Mas eu estava pensando em algo mais imediato, alguma equação pra usar no create que me desse o ângulo de qualquer path_position, nem que usasse uma interpolação.
Se é assim então o path_positionprevius é que esta atualizando em outra hora porque realmente eles não sempre igual não importa o tipo do step.

Bom, se você quer saber a posição anterior ou a proxima, o equivalente a path_position seria:
Código:
(1/(path_get_length(path0)/(path_speed*steps)) mod 1)
Sendo "steps" o numero de passos do objeto (+1 a cada Event Step normal) então para saber a proxima ou a anterior é só adicionar +1 ou -1 no steps.
Não da pra prever o futuro então se a velocidade varia não acho que da pra prever com precisão a proxima position mas a anterior não tem problema.
Ai usando path_get_x/y descobria a direção.
Kabeção
Kabeção

Games Ranking : Sem avaliações

Data de inscrição : 08/06/2008
Reputação : 100
Número de Mensagens : 2314
Prêmios : [Resolvido] path_direction - como fazer? Empty

Medalhas x 0 Tutoriais x 7 Moedas x 0

Ouro x 3 Prata x 0 Bronze x 1

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

http://blackcapapps.blogspot.com.br/

Ir para o topo Ir para baixo

[Resolvido] path_direction - como fazer? Empty Re: [Resolvido] path_direction - como fazer?

Mensagem por saim Ter 20 Mar 2012, 15:37

É, acho que isso já dá pra brincar um pouco... E essa idéia de dividir a pista em vários trechos pra checar as collision_lines pode mudar radicalmente a minha forma de programar.
Vou ver o que sai. Se eu conseguir alguma coisa a tempo, o resultado vai aparecer no concurso.

Obrigado!
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 : [Resolvido] path_direction - como fazer? 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

[Resolvido] path_direction - como fazer? Empty Re: [Resolvido] path_direction - como fazer?

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo


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