Conectar-se
Quem está conectado
21 usuários online :: 1 usuário cadastrado, Nenhum Invisível e 20 Visitantes

CRP-Max

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
Ranking : Nota D
Notas recebidas : E+D
Data de inscrição : 29/10/2011
Número de Mensagens : 128
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áriohttp://gmls.forumeiros.com/

Alinhar

em Seg 20 Fev 2012, 22:18
Como se faz para o objeto sempre ficar alinhado em uma posição de 32 pixels para mais ou para menos.

Explicando melhor, se o jogador pressionar alguma tecla ele é alinhado só que entre as posições: 32, 64, 96, 128, ect, até 640 (sempre aumentando 32).
avatar
Ranking : Nota A
Notas recebidas : C+A+A+B+A
Data de inscrição : 10/09/2010
Número de Mensagens : 426
Insígnias de JAM :

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

Prêmios
   : 2
   : 2
   : 0
Ver perfil do usuáriohttp://williammustaffa.blogspot.com

Re: Alinhar

em Seg 20 Fev 2012, 22:21
Existe a função place_snapped(x,y) que checa se você está alinhado...
basta fazer com que ao soltar a tecla de movimento (rpg com grid) somente pare se você estiver alinhado com a grid do place_snapped()
avatar
Ranking : Nota B
Notas recebidas : D+B+B+C+A
Data de inscrição : 24/08/2009
Número de Mensagens : 1092
Insígnias de JAM :

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

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

Re: Alinhar

em Seg 20 Fev 2012, 22:23
Ou pode colocar isso
Código:
x=(round(x/32))*32;
y=(round(y/32))*32;
Ranking : Nota D
Notas recebidas : E+D
Data de inscrição : 29/10/2011
Número de Mensagens : 128
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áriohttp://gmls.forumeiros.com/

Re: Alinhar

em Seg 20 Fev 2012, 22:28
Nenhum dos 2 funcionou, ou melhor não aconteceu nada.
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
Reputação : 6

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

Re: Alinhar

em Seg 20 Fev 2012, 23:30
Eu faço assim...
Cria um script com o nome "move" e nele você escreve:
Código:
var dir, spd;
dir = argument0;
spd = argument1;
motion_set(dir, spd);
No step do player você edita as funções de comando pra ele andar em grid de 32x32
Código:
//movimentos
var snap;//Verifica se esta alinhado com a grade de 32 x 32 e armazena em "snap"
snap = place_snapped(32, 32);
//mover para esquerda
if (keyboard_check(vk_left)  and snap)
{
move(180,4)
sprite_index = left
};
//mover para direita
if (keyboard_check(vk_right) and snap)
{move(0,4)
sprite_index = right
};
//mover para cima
if (keyboard_check(vk_up)    and snap)
{move(90,4)
sprite_index = up
};
//mover para baixo
if (keyboard_check(vk_down)  and snap)
{move(270,4)
sprite_index = down
};
//não se mover
if (keyboard_check(vk_nokey) and snap){
motion_set(0, 0)
};
if (hspeed <> 0) or (vspeed <> 0)
    image_speed = 0.5
    else
{
    image_speed = 0;
    image_index = 0;
}
Aqui funcionou e aí?
avatar
Ranking : Nota C
Notas recebidas : C + C
Data de inscrição : 19/10/2011
Número de Mensagens : 337
Insígnias de JAM :

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

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

Re: Alinhar

em Ter 21 Fev 2012, 00:25
vou dar um exemplo usando as teclas do teclado, pra mover a posicao pra baixo :
Código:
if keyboard_check(vk_down)//se apertar pra baixo
{if y=0 {y=16}//se y=0 entao y=16
else {y=y*2}}// caso contrario a posicao se multiplica por 2 (se estiver em 16, vai pra 32, se estiver em 32, vai pra 64, assim em diante)

Provavelmente nao estava acontecendo nada por que a posicao inicial dele é 0, entao, advinha o que dá multiplicar o 0? Happy
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
Reputação : 6

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

Re: Alinhar

em Ter 21 Fev 2012, 13:34
Mas Funkbuster, se ele fizer assim vai perecer que ele ta se teletransportando de um ponto pro outro. Se ele usar o código que eu postei acima, vai de pixel em pixel até chegar no ponto certo e se a tecla continuar pressionada ele continua sem parar até que a tecla seja solta.
avatar
Ranking : Nota C
Notas recebidas : C
Data de inscrição : 30/07/2011
Número de Mensagens : 928
Insígnias de JAM :

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

Prêmios
   : 0
   : 0
   : 1
Ver perfil do usuáriohttp://luizpontes.tk/

Re: Alinhar

em Ter 21 Fev 2012, 15:11
Tem um jeito beeem mais simples:
Código:
if place_snapped(32,32) {
hspeed=((keyboard_check(vk_right)*place_free(x+4,y))-(keyboard_check(vk_left)*place_free(x-4,y)))*4
//faz o mesmo com o "vspeed"
}
Até mais!
avatar
Ranking : Nota B
Notas recebidas : D+A+B
Data de inscrição : 16/01/2012
Número de Mensagens : 787
Insígnias de JAM :

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

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuáriohttp://need90games.blogspot.com.br

Re: Alinhar

em Ter 21 Fev 2012, 15:30
Nossa pra que tanto, faça assim :
Código:

move_snap(32,32); //Alinha ao grid

if keyboard_check_pressed(vk_up){y-=32} //Move pra cima
if keyboard_check_pressed(vk_down){y+=32} //Move pra baixo
if keyboard_check_pressed(vk_left){x-=32} //Move para esquerda
if keyboard_check_pressed(vk_right){x+=32} //Move para direita

Olha um exemplo de como vai ficar :
http://dl.dropbox.com/u/46263990/Teste/index.html

É tão simples.
avatar
Ranking : Nota C
Notas recebidas : C
Data de inscrição : 30/07/2011
Número de Mensagens : 928
Insígnias de JAM :

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

Prêmios
   : 0
   : 0
   : 1
Ver perfil do usuáriohttp://luizpontes.tk/

Re: Alinhar

em Ter 21 Fev 2012, 15:34
Need 90, novamente como ja foi dito, isto vai teletransportar o objeto. O meu codigo e o de alguem ali em cima anda pixel-per-pixel. E o seu ele pode sair numa arrancada com tudo.
-----ED
Quer dizer, ele vai muito lento. Tem que ficar apertando varias vezes pra andar.
-----ED2
Trocentas Quatrocentas mensagens!!!


Última edição por luiz_eldorado em Ter 21 Fev 2012, 15:38, editado 1 vez(es)
avatar
Ranking : Nota B
Notas recebidas : D+A+B
Data de inscrição : 16/01/2012
Número de Mensagens : 787
Insígnias de JAM :

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

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuáriohttp://need90games.blogspot.com.br

Re: Alinhar

em Ter 21 Fev 2012, 15:37
Na verdade não, pois está no pressed.

Ele não vai arrancar e nem teletransportar, olha o exemplo que eu ponhei abaixo do código.
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
Reputação : 6

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

Re: Alinhar

em Ter 21 Fev 2012, 15:54
Se é pra simplificar, ta aqui o meu exemplo bem mais reduzido que antes e funcionando perfeitamente.
Você só tem que colocar no evento step:
Código:
if (keyboard_check(vk_left)  and place_snapped(32, 32)){motion_set(180,4)};
if (keyboard_check(vk_right) and place_snapped(32, 32)){motion_set(0,4)};
if (keyboard_check(vk_up)    and place_snapped(32, 32)){motion_set(90,4)};
if (keyboard_check(vk_down)  and place_snapped(32, 32)){motion_set(270,4)};
if (keyboard_check(vk_nokey) and place_snapped(32, 32)){motion_set(360,0)};
Lembre se de tentar entender os códigos pra que aprenda o porque de cada um deles.
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