Conectar-se
Quem está conectado
23 usuários online :: Nenhum usuário registrado, Nenhum Invisível e 23 Visitantes

Nenhum

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
Ranking : Nota A
Notas recebidas : A
Data de inscrição : 13/10/2011
Número de Mensagens : 106
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 4

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuáriohttp://bigleafeater.tumblr.com/

Solução para movimento em terreno irregular?

em Seg 09 Jul 2012, 18:06
Olá pessoas, eu estou com mais algumas dúvidas de lógica. Mas dessa vez eu acho que não é qualquer pessoa que pode me ajudar, já que é uma dúvida que requer mais conhecimentos de lógica / Programação/ matemática / física/ loucura. Então... Vamos a dúvida.

Estava eu pesquisando como fazer movimentação em terrenos irregulares e vi que haviam postado em um fórum do game maker que é possível fazer de uma maneira mais simples este tipo de movimentação(sem necessidade de dlls). Daí eu comecei a estudar um pouco mais este método e a ideia dele é: Fazer com que o player se movimente através da "permissão" de dois pontos que colidem no solo.

É meio complicado de explicar, por isto, aí vai uma imagem(que eu fiz. Sim, está feia.):

A ideia é a seguinte: os pontos ficam em uma distância predeterminada(exemplo, como a imagem mostra, estes pontos podem ficar no centro (em relação ao eixo y) só que ficam, ambos, bem a frente do player (em relação ao eixo x) sendo um na ponta da sprite e outro mais ou menos 10 pixels a frente da própria sprite.(Lembrando que estes pontos não são objetos. São apenas variáveis que são determinadas por um "if point_position" ou algo do tipo. O importante é saber que são coordenadas)

A cada step estes pontos "cairão", pararão ao "colidir" com o chão(ele não colidirá já que não é um objeto) e determinaram o ângulo formado por estes pontos através do point_direction (entre os pontos). Desta forma, o player terá uma direção para se movimentar independente do solo. Lógico que se for muito alta a plataforma ele também andará MAAAAAS é só coloca um "if" que delimite o ângulo máximo que o player pode se movimentar... Por exemplo, se o ângulo formado for entre 60° e 120° coloca-se que ele não poderá se movimentar.


Aí que vem a minha dúvida. Não quero perder tempo trabalhando com um método rudimentar. Só preciso saber se este é o método mais simples para se trabalhar com movimentação em terrenos irregulares e/ou se vocês tem alguma incrementação ao sistema.
Ranking : Nota D
Notas recebidas : D
Data de inscrição : 07/12/2010
Número de Mensagens : 75
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 1

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

Re: Solução para movimento em terreno irregular?

em Seg 09 Jul 2012, 18:46
Acho mais simples usar o move_contact
Não vais precisar de criar "milhares" de variaveis
Veja esta engine feita pelo Jiraya
http://gmbr.forumeiros.com/t21693-exemploplataforma-simples-para-iniciantes?highlight=plataforma
Ranking : Nota C
Notas recebidas : C+B
Data de inscrição : 26/07/2008
Número de Mensagens : 6037
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 288

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

Re: Solução para movimento em terreno irregular?

em Seg 09 Jul 2012, 18:50
Para pegar a posição do canto da sprite, use bbox_right e bbox_bottom.

Um jeito também que dá certo é:

Código:

//mover_rampas(x_speed, angulo maximo)

var hor, angulo, y_max, temp1;
hor = (keyboard_check(vk_right) - keyboard_check(vk_left));
if (hor==0) return 0;

temp1 = tan(degtorad(argument1));
y_max = temp1*(argument0 - x) + y;

var i;
for (i = 0; i < y_max; i += 1)
{
angulo = point_direction(x, y, x + hor * argument0, y - i)
if (hor==-1) if (angulo< 180-argument1) return 0;
if (hor==+1)if (angulo> argument1) return 0;

if (place_free(x+ hor * argument0, y- i))
    {
        x += hor*argument0;
        y -= i;
return 1;
    }
}
return 0;

Envolve matemática como você disse.

Até mais!
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