[Resolvido]Me ajudem a entender esse código

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

Resolvido [Resolvido]Me ajudem a entender esse código

Mensagem por .:Allison:. em Ter 21 Jun 2011, 18:52

Bom, eu estava vendo uma engine de colisão perfeita em rampas, e achei essa engine, porém não posso usar se não entender, pedi ajuda para alguns amigos porém não consegui, eu sei para que serve, é para a movimentação, porém queria saber como funciona cada linha de código que contém o script, queria que vocês me ajudassem, principalmente na parte do for e tipo a variável i, mudará de valor constantemente, poderiam mim dizer também em cada linha qual o seu valor? fico grato desde já! Aquele que me ajudar terá +1 de reputação!!

argument0 = 3
argument1 = vk_up
argument2 = vk_down
argument3 = vk_left
argument4 = vk_right
var i;
if (keyboard_check(argument1))
for (i=argument0;i>=0;i-=1)
if (place_free(x,y-i))
y-=i;
else
{
if (place_free(x-i,y-i))
x-=i/2;
if (place_free(x+i,y-i))
x+=i/2;
}
if (keyboard_check(argument2))
for (i=argument0;i>=0;i-=1)
if (place_free(x,y+i))
y+=i;
else
{
if (place_free(x-i,y+i))
x-=i/2;
if (place_free(x+i,y+i))
x+=i/2;
}
if (keyboard_check(argument3))
for (i=argument0;i>=0;i-=1)
if (place_free(x-i,y))
x-=i;
else
{
if (place_free(x-i,y-i))
y-=i/2;
if (place_free(x-i,y+i))
y+=i/2;
}
if (keyboard_check(argument4))
for (i=argument0;i>=0;i-=1)
if (place_free(x+i,y))
x+=i;
else
{
if (place_free(x+i,y-i))
y-=i/2;
if (place_free(x+i,y+i))


Última edição por .:Allison:. em Ter 21 Jun 2011, 20:25, editado 1 vez(es)

.:Allison:.

Ranking : Nota B
Número de Mensagens : 630
Idade : 20
Data de inscrição : 25/07/2010
Notas recebidas : B
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://clubmaker.forumeiros.com

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Me ajudem a entender esse código

Mensagem por Klior em Ter 21 Jun 2011, 19:59

.:Allison:. escreveu:Bom, eu estava vendo uma engine de colisão perfeita em rampas, e achei essa engine, porém não posso usar se não entender, pedi ajuda para alguns amigos porém não consegui, eu sei para que serve, é para a movimentação, porém queria saber como funciona cada linha de código que contém o script, queria que vocês me ajudassem, principalmente na parte do for e tipo a variável i, mudará de valor constantemente, poderiam mim dizer também em cada linha qual o seu valor? fico grato desde já! Aquele que me ajudar terá +1 de reputação!!

argument0 = 3
argument1 = vk_up
argument2 = vk_down
argument3 = vk_left
argument4 = vk_right
//argumentos 1, 2, 3, 4 são utilizados para facilitar o usuário da engine modificar as teclas de movimentação do objeto.
//argumento 0 = speed

var i;//criando variável i
if (keyboard_check(argument1)) //verifica se vk_up está pressionado
for (i=argument0;i>=0;i-=1) //cria um loop para mover o objeto, ele primeiramente vai verificar se "y - 3" existe um objeto solido, se não existir o player se moverá "y -=3", caso exista, ele verificará "y - 2", caso não haja objeto solido o objeto se moverá "y -= 2" caso exista um objeto solido, ele verificará se existe um em "y - 1", se não existir o objeto se moverá "y -= 1"

if (place_free(x,y-i)) //vai verificar se existe um objeto solido em "y - i", ou seja "y - 3, y -2, y - 1"
y-=i; //caso na posição "y - i" não exista um objeto "solido" o objeto se moveria -1, -2 ou -3 pixel na vertical
else //se y - i houver um objeto solido.
{//aqui vai acontecer o seguinte, sabe quando o player está na "quina" de um objeto.. e se pressionado para cima ele da uma deslisada na diagonal..
if (place_free(x-i,y-i)) //verificará se na posição "x-i" e "y-i" não há um objeto solido, caso não haja, moverá o objeto para esquerda, tirando-o do raio de colisão com o objeto que está a sua frente(y-i).
x-=i/2; //deslocará o objeto para "x - 0,5" ou "x - 1" ou "x - 1,5", dependerá do valor de "i", i terá valores "0, 1, 2, 3"
if (place_free(x+i,y-i))//mesma coisa que o código acima, só que verificando as posição do lado direito.
x+=i/2;
}
if (keyboard_check(argument2))
for (i=argument0;i>=0;i-=1)
if (place_free(x,y+i))
y+=i;
else
{
if (place_free(x-i,y+i))
x-=i/2;
if (place_free(x+i,y+i))
x+=i/2;
}
if (keyboard_check(argument3))
for (i=argument0;i>=0;i-=1)
if (place_free(x-i,y))
x-=i;
else
{
if (place_free(x-i,y-i))
y-=i/2;
if (place_free(x-i,y+i))
y+=i/2;
}
if (keyboard_check(argument4))
for (i=argument0;i>=0;i-=1)
if (place_free(x+i,y))
x+=i;
else
{
if (place_free(x+i,y-i))
y-=i/2;
if (place_free(x+i,y+i))

Não sei se fui muito explicativo, mais acho que vai entender, caso não entenda alguma coisa me diga que tento explicar melhor..

Acho muito interessante você tentar compreender o código, a maioria dos usuários só copiam e colam mesmo não entendendo o funcionamento

Editado: Agora, prestando mais atenção vi que você falou "eu estava vendo uma engine de colisão perfeita em rampas", pelo que eu entendi esse código é para jogos rpg, vou testar esse código, caso não seja isso que falei dou outro edited..


Última edição por Klior em Ter 21 Jun 2011, 20:44, editado 4 vez(es)

Klior

Número de Mensagens : 426
Idade : 25
Data de inscrição : 07/03/2010
Reputação : 13
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: [Resolvido]Me ajudem a entender esse código

Mensagem por .:Allison:. em Ter 21 Jun 2011, 20:25

Muito obrigado a você, por ter dado a formula, e muito obrigado ainda à o LCS que conversando pelo msn , conseguiu entender a sua explicação e mim explicou mais detalhado ainda ! Agradeço aos dois por terem a paciência de querer mim ajudar, graças a vocês dois, eu entendo muito bem o for !

Resolvido, não pedirei para ninguem trancar, se o Klior quiser postar mais alguma coisa !!! Pode postar !

.:Allison:.

Ranking : Nota B
Número de Mensagens : 630
Idade : 20
Data de inscrição : 25/07/2010
Notas recebidas : B
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://clubmaker.forumeiros.com

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Me ajudem a entender esse código

Mensagem por MatheusReis em Ter 21 Jun 2011, 20:33

Como o klior disse, é um codigo de rpg:

Resumindo, o código primeiramente tenta mover na direção indicada. Se não conseguir(colisão com parede) ele vai tentar mover nas diagonais, no caso de paredes na diagonal(deslizando).

MatheusReis

Ranking : Nota A
Número de Mensagens : 1087
Idade : 23
Data de inscrição : 13/01/2010
Notas recebidas : B-A-A
Reputação : 30
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 0

http://www.mathaeuz.deviantart.com

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Me ajudem a entender esse código

Mensagem por Klior em Ter 21 Jun 2011, 20:34

Desculpa não ter explicado corretamente antes, porque eu não tinha reparado que o loop era subtrativo, dei uma editada no meu post explicando de forma correta. Abraços

Klior

Número de Mensagens : 426
Idade : 25
Data de inscrição : 07/03/2010
Reputação : 13
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: [Resolvido]Me ajudem a entender esse código

Mensagem por .:Allison:. em Ter 21 Jun 2011, 20:38

Entendi perfeitamente agora, no caso é um movimento mais preciso do que usar place_metting, por que ele não sai dando pulinhos e é mais simples do que usar seno e cosseno.

.:Allison:.

Ranking : Nota B
Número de Mensagens : 630
Idade : 20
Data de inscrição : 25/07/2010
Notas recebidas : B
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://clubmaker.forumeiros.com

Voltar ao Topo Ir em baixo

Resolvido Re: [Resolvido]Me ajudem a entender esse código

Mensagem por Conteúdo patrocinado Hoje à(s) 11:48


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