Entrar
Últimos assuntos
» player não consegue andarpor lovn7 Qui 21 Nov 2024, 13:33
» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22
» (Resolvido) Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31
» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23
» (RESOLVIDO) Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49
» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58
» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36
» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36
» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33
» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51
» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28
» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18
» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08
» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10
» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16
» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40
» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01
» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45
» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34
» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28
» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48
» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54
» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14
» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50
Tutorial de gravidade e movimento em rampas
5 participantes
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
Tutorial de gravidade e movimento em rampas
Título: Tutorial de gravidade e movimento em rampas
--------------------- Versão do GM: Todas! ---------------------
--------------------- Dificuldade: Fácil ---------------------
--------------------- Requer Extensões: Não ---------------------
--------------------- Requer DLLs: Não ---------------------
----------------- Tags: Gravidade, scripts, platform, plataforma-----------------
--------------------- Tutorial Gravidade---------------------
Bom, nesse tutorial irei lhes ensinar a fazer seu próprio sistema de gravidade por scripts. ATENÇÃO: Vou ensinar no modo physics do Game Maker Studio, mais para usar o ensinado deste tutorial sem o mesmo, basta alterar as variáveis phy_position_x e phy_position_y do script para x e y.
bom, primeiramente, crie uma room e ligue o physics com as seguintes informações:
Gravity X=0.0 Y=0.0
pixels to meters=0.100
em seguida crie um script, vamos chama-lo de gravity_init
nesse script, adicione a variavel gspeed com o valor 0 e a variavel no_chao com o valor false.
- Intenda:
A variável gspeed serve para a velocidade da gravidade ou a velocidade que o objeto ira cair.
A variavel no_chao serve para ver se o objeto esta no chao, ou, em cima de algo solido.
em seguida, vamos ao movimento da gravidade.
crie um novo script, e chamaremos esse de gravity_set. Este script e um pouco mais complexo, mais vou tentar deixar bem explicado.
Ai vai o script: (vou explicar as variaveis e funçoes logo abaixo do script!)
- Código:
gravity_speed=argument0
gravity_direction_=argument1
if(gravity_speed=0){gspeed=0}//se a aumento de velocidade de queda for 0, a velocidade de queda sera 0 também.
if(place_free(phy_position_x,phy_position_y+gspeed+1)){//se o espaço estiver aberto para o carácter cair
gspeed+=gravity_speed //a velocidade de queda aumenta
phy_position_x+=lengthdir_x(gspeed,gravity_direction_)//o objeto se move
phy_position_y+=lengthdir_y(gspeed,gravity_direction_)//o objeto se move
no_chao=false//ele não esta no chão
}else{//se não.
gspeed=0 vspeed=0 //ambas as velocidades de queda sao zeradas. (para evitar erro coloquei o vspeed)
if(!place_free(phy_position_x,phy_position_y+1)){no_chao=true}}//se o espaço NÃO estiver aberto para o caracter cair, ele esta no chão
- Intenda:
Para usar o script, coloque no step:- Código:
gravity_set(peso do objeto, direção da gravidade)
A variável gravity_direction_, NÃO e uma variável padrão do GM:S, e armazena a direção em que o objeto cai. (peso)
A variável phy_position_x, e uma variável padrão do GM:S, e armazena a posição horizontal do objeto na room. (se não estiver a usar o GM:S ou no seu game maker não tiver as funções physics, troque por x.)
A variável phy_position_y, e uma variável padrão do GM:S, e armazena a posição vertical do objeto na room. (se não estiver a usar o GM:S ou nao tiver/puder usar as funções physics, troque por y.)
A função place_free(x,y), checa se a posiçao x/y esta aberta. (se nao a um objeto solido la)
ex:- Código:
if(place_free(x+2,y)){x+=2}//Checa se o espaço 2 pixels a direita esta aberto, e anda ate la.
e Pronto, para usar o sistema basta:
No Evento Create:
- Código:
gravity_init()
No Evento Step:
- Código:
gravity_set(1,270)
------------------ Movimento com Rampas------------------
Script:(Parte das variáveis desse script já foi explicada acima, vou explicar só oque não foi ainda.)- Código:
if(argument1>90){set=-1}//se a direçao do movimento for maior que 90, a variavel set sera igual a -1
if(argument1<90){set=+1}//se a direçao do movimento for menor que 90, a variavel set sera igual a +1
xl=lengthdir_x(argument0,argument1)//armazena o lenghtdir_x para usar em seguida
yl=lengthdir_y(argument0,argument1)//armazena o lenghtdir_y para usar em seguida
_exit=false i=0//zera as variaveis para nao aver erros
while(_exit=false){//enquento a variavel _exit for falsa
if(place_free(phy_position_x+xl,phy_position_y+yl-abs(i*set))){//se o espaço estiver aberto
phy_position_y+=yl-abs(i*set) _exit=true//diminui a posiçao y (sobe) e sai dessa checagem
}else{
if(i<25){i+=1}else{_exit=true}//se a variavel i for <25 vai almentando, se nao, sai dessa checagem.
}}
if(place_free(phy_position_x+xl,phy_position_y+yl)){phy_position_x+=xl phy_position_y+=yl}//se o espaço estiver aberto, se move
- Intenda:
while(condiçao){açao}//enquanto a condiçao for verdadeira, a açao se repetira.
exemplo:- Código:
while(x<room_width){//enquanto a variavel x for menor que o tamanho horizontal da room
x+=1//o objeto se move em direçao ao fim da room
}
Bom, e isso.
Peço que em caso de erros e duvidas comentem!!!
Re: Tutorial de gravidade e movimento em rampas
eu alterei as variáveis phy_position_x e phy_position_y do script para x e y.
e aparece essa mensagem na tela
era pra criar no "obj do play??"
e aparece essa mensagem na tela
era pra criar no "obj do play??"
Lucas Farias- Games Ranking :
Notas recebidas : C
Data de inscrição : 01/08/2014
Reputação : 9
Número de Mensagens : 35
Prêmios :
x 0 x 0 x 0
x 0 x 1 x 1
x 0 x 0 x 0
Re: Tutorial de gravidade e movimento em rampas
olá meu caro, você criou os scripts corretamente? de acordo com o tuto?
se acha que não, aqui estão eles:
se acha que não, aqui estão eles:
- Código:
//NOME: gravity_init()
gspeed=0
no_chao=false
- Código:
//NOME: gravity_set(1,270)
gravity_speed=argument0
gravity_direction_=argument1
if(gravity_speed=0){gspeed=0}//se a aumento de velocidade de queda for 0, a velocidade de queda sera 0 também.
if(place_free(phy_position_x,phy_position_y+gspeed+1)){//se o espaço estiver aberto para o carácter cair
gspeed+=gravity_speed //a velocidade de queda aumenta
phy_position_x+=lengthdir_x(gspeed,gravity_direction_)//o objeto se move
phy_position_y+=lengthdir_y(gspeed,gravity_direction_)//o objeto se move
no_chao=false//ele não esta no chão
}else{//se não.
gspeed=0 vspeed=0 //ambas as velocidades de queda sao zeradas. (para evitar erro coloquei o vspeed)
if(!place_free(phy_position_x,phy_position_y+1)){no_chao=true}}//se o espaço NÃO estiver aberto para o caracter cair, ele esta no chão
Re: Tutorial de gravidade e movimento em rampas
isaque eu gostei muito do seu codigo de gravidade pois é bem simples de se entender o conceito, mas eu achei um probleminha não sei se é proposital mas quando o objeto cai de uma altura muito grande ele meio que da uma quicadinha, tem como resolver isto?
Por hora já te dou os parabéns por ter tido o trabalho da criação do codigo s2 ;D
Por hora já te dou os parabéns por ter tido o trabalho da criação do codigo s2 ;D
Re: Tutorial de gravidade e movimento em rampas
então meu caro, eu criei estes outros scripts:
acho que da certo =)
create:
- Código:
gspeed=0
xspeed=8
step:
- Código:
if(place_free(x+lengthdir_x(gspeed+1,270),y+lengthdir_y(gspeed+1,270))){
gspeed+=1
x+=lengthdir_x(gspeed,270)
y+=lengthdir_y(gspeed,270)}else{
D=point_direction(x,y,x+lengthdir_x(gspeed+1,270),y+lengthdir_y(gspeed+1,270))
move_contact_solid(D,gspeed)
gspeed=0}
if(keyboard_check(ord('W')) && !place_free(x,y+gspeed+1)){gspeed=-16}
if(keyboard_check(ord('A'))){repeat(xspeed){if(place_free(x-1,y)){x-=1}}}
if(keyboard_check(ord('D'))){repeat(xspeed){if(place_free(x+1,y)){x+=1}}}
acho que da certo =)
Re: Tutorial de gravidade e movimento em rampas
Duas coisas:
1°
::errado:: ::certo::
intenda - entenda
2°
Percebo que para fazer seu código funcionar, é preciso definir o objeto como solid:
E ao meu ver o solid é uma função bem ruim de se usar, porque ele é uma função embutida que limita muito o seu controle pelo os objetos.
Exemplo: tente fazer uma plataforma fantasma usando o solid.
Do mais, acredito que este tutorial/scripts pode ter no fim do tópico, uma engine com o que foi feito/mostrado.
1°
::errado:: ::certo::
2°
Percebo que para fazer seu código funcionar, é preciso definir o objeto como solid:
- Código:
D=point_direction(x,y,x+lengthdir_x(gspeed+1,270),y+lengthdir_y(gspeed+1,270))
move_contact_solid(D,gspeed)
E ao meu ver o solid é uma função bem ruim de se usar, porque ele é uma função embutida que limita muito o seu controle pelo os objetos.
Exemplo: tente fazer uma plataforma fantasma usando o solid.
Do mais, acredito que este tutorial/scripts pode ter no fim do tópico, uma engine com o que foi feito/mostrado.
Re: Tutorial de gravidade e movimento em rampas
theguitarmester escreveu:Duas coisas:
1°
::errado:: ::certo::
intenda- entenda
Mania... mais acho que não atrapalha tanto quanto parece...
theguitarmester escreveu:
2°
Percebo que para fazer seu código funcionar, é preciso definir o objeto como solid:
- Código:
D=point_direction(x,y,x+lengthdir_x(gspeed+1,270),y+lengthdir_y(gspeed+1,270))
move_contact_solid(D,gspeed)
E ao meu ver o solid é uma função bem ruim de se usar, porque ele é uma função embutida que limita muito o seu controle pelo os objetos.
Exemplo: tente fazer uma plataforma fantasma usando o solid.
meu caro, não me leve a mal, mais o solid é uma função muito util, e ajuda mais ainda a obter controle sobre os objetos... a final, a função não seria criada e testada atoa né mais... desafio aceito!
ENGINE
a engine contem:
2 sprites: um branco e um preto...
6 objetos:
object0: seria o player, as funções que coloquei aqui estão nele.
Solid_fixed: o objeto solido sem ação.
Solid_Fantasma: plataforma fantasma.
Solid_moving_h: plataforma móvel horizontal.
Solid_moving_v: plataforma móvel vertical.
Solid_fall: plataforma que "cai" quando o player passa.
FEITO. té mais...theguitarmester escreveu:
Do mais, acredito que este tutorial/scripts pode ter no fim do tópico, uma engine com o que foi feito/mostrado.
INTENDA hehehe
[edit]
e da pra mudar o move_contact_solid para move_contact_all ou até mesmo tirar este codigo, ele é para evitar que o personagem de aquele pulinho ao cair...
Re: Tutorial de gravidade e movimento em rampas
Isaque se a gravity_speed e gravity_direction não existe no gms, ou melhor, não são padrão, como que eu vou fazer? Se eu to trabalhando no gms? Vou ter que criar a variavel e dar a função? To confuso
Riccardoric- Data de inscrição : 17/06/2014
Reputação : 34
Número de Mensagens : 206
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Tutorial de gravidade e movimento em rampas
Riccardoric escreveu:Isaque se a gravity_speed e gravity_direction não existe no gms, ou melhor, não são padrão, como que eu vou fazer? Se eu to trabalhando no gms? Vou ter que criar a variavel e dar a função? To confuso
meu amigo, estou sem tempo pra testar, mais tente o outro codigo.
Re: Tutorial de gravidade e movimento em rampas
"------------------ Movimento com Rampas------------------
Script:(Parte das variáveis desse script já foi explicada acima, vou explicar só oque não foi ainda.)
CÓDIGO:
if(argument1>90){set=-1}//se a direçao do movimento for maior que 90, a variavel set sera igual a -1
if(argument1<90){set=+1}//se a direçao do movimento for menor que 90, a variavel set sera igual a +1
xl=lengthdir_x(argument0,argument1)//armazena o lenghtdir_x para usar em seguida
yl=lengthdir_y(argument0,argument1)//armazena o lenghtdir_y para usar em seguida
_exit=false i=0//zera as variaveis para nao aver erros
while(_exit=false){//enquento a variavel _exit for falsa
if(place_free(phy_position_x+xl,phy_position_y+yl-abs(i*set))){//se o espaço estiver aberto
phy_position_y+=yl-abs(i*set) _exit=true//diminui a posiçao y (sobe) e sai dessa checagem
}else{
if(i<25){i+=1}else{_exit=true}//se a variavel i for <25 vai almentando, se nao, sai dessa checagem.
}}
if(place_free(phy_position_x+xl,phy_position_y+yl)){phy_position_x+=xl phy_position_y+=yl}//se o espaço estiver aberto, se move "
Esse ? se for esse n precisa do primeiro?
Script:(Parte das variáveis desse script já foi explicada acima, vou explicar só oque não foi ainda.)
CÓDIGO:
if(argument1>90){set=-1}//se a direçao do movimento for maior que 90, a variavel set sera igual a -1
if(argument1<90){set=+1}//se a direçao do movimento for menor que 90, a variavel set sera igual a +1
xl=lengthdir_x(argument0,argument1)//armazena o lenghtdir_x para usar em seguida
yl=lengthdir_y(argument0,argument1)//armazena o lenghtdir_y para usar em seguida
_exit=false i=0//zera as variaveis para nao aver erros
while(_exit=false){//enquento a variavel _exit for falsa
if(place_free(phy_position_x+xl,phy_position_y+yl-abs(i*set))){//se o espaço estiver aberto
phy_position_y+=yl-abs(i*set) _exit=true//diminui a posiçao y (sobe) e sai dessa checagem
}else{
if(i<25){i+=1}else{_exit=true}//se a variavel i for <25 vai almentando, se nao, sai dessa checagem.
}}
if(place_free(phy_position_x+xl,phy_position_y+yl)){phy_position_x+=xl phy_position_y+=yl}//se o espaço estiver aberto, se move "
Esse ? se for esse n precisa do primeiro?
Riccardoric- Data de inscrição : 17/06/2014
Reputação : 34
Número de Mensagens : 206
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Tutorial de gravidade e movimento em rampas
este codigo ae não precisa daquelas variaveis, aquelas são para o sistema de gravidade.
pra usar este codigo ae é só criar o script e colocar os argumentos.
pra usar este codigo ae é só criar o script e colocar os argumentos.
Re: Tutorial de gravidade e movimento em rampas
Ah ta entendi, vlw
Riccardoric- Data de inscrição : 17/06/2014
Reputação : 34
Número de Mensagens : 206
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Tutorial de gravidade e movimento em rampas
Vi sua engine, e confirmei o que disse!
Não da para fazer uma plataforma fantasma usando o Solid. veja bem, você teve que desativar a função solid para poder passar por ela. Então, quando você a desativa, será desativado para todos objetos que estão na room, ou seja, qualquer outro inimigo ou jogador que se encontrar naquele mesmo momento, irá passar por dentro da plataforma.
Eu já sabia disse por experiência própria, quando tentei a usar para o CA(2012), em que usava no jogo o solid, e fui fazer a plataforma fantasma, e daí, quando o inimigo estava em cima dela, e o herói ia atravessá-la, o inimigo caía.
Desde então não utilizo mais o Solid, pois também já tive outros problemas com ele.
Uma coisa:
Ao menos no conceito que sei, em plataforma fantasma, você pode passar por dentro dela para subí-la, coisa que não acontece na sua engine.
Então, qual é seu argumento agora para defender o SOLID?
Não da para fazer uma plataforma fantasma usando o Solid. veja bem, você teve que desativar a função solid para poder passar por ela. Então, quando você a desativa, será desativado para todos objetos que estão na room, ou seja, qualquer outro inimigo ou jogador que se encontrar naquele mesmo momento, irá passar por dentro da plataforma.
Eu já sabia disse por experiência própria, quando tentei a usar para o CA(2012), em que usava no jogo o solid, e fui fazer a plataforma fantasma, e daí, quando o inimigo estava em cima dela, e o herói ia atravessá-la, o inimigo caía.
Desde então não utilizo mais o Solid, pois também já tive outros problemas com ele.
Uma coisa:
Ao menos no conceito que sei, em plataforma fantasma, você pode passar por dentro dela para subí-la, coisa que não acontece na sua engine.
Então, qual é seu argumento agora para defender o SOLID?
Re: Tutorial de gravidade e movimento em rampas
cara, inteligencia artificial não pode "seguir" o player se tratando de programação... ja fiz jogos complexos (de zoeira) em que o inimigo pula se não tiver espaço pra andar, atira, joga bomba, sempre usando o solid, mas, o inimigo não desce pela plataforma fantasma, logo, a checagem dele não é "if(place_free(..." ele simplesmente cai até encontrar o objeto desejado ;)theguitarmester escreveu:Vi sua engine, e confirmei o que disse!
Não da para fazer uma plataforma fantasma usando o Solid. veja bem, você teve que desativar a função solid para poder passar por ela. Então, quando você a desativa, será desativado para todos objetos que estão na room, ou seja, qualquer outro inimigo ou jogador que se encontrar naquele mesmo momento, irá passar por dentro da plataforma.
Eu já sabia disse por experiência própria, quando tentei a usar para o CA(2012), em que usava no jogo o solid, e fui fazer a plataforma fantasma, e daí, quando o inimigo estava em cima dela, e o herói ia atravessá-la, o inimigo caía.
Desde então não utilizo mais o Solid, pois também já tive outros problemas com ele.
Uma coisa:
Ao menos no conceito que sei, em plataforma fantasma, você pode passar por dentro dela para subí-la, coisa que não acontece na sua engine.
Então, qual é seu argumento agora para defender o SOLID?
e posso fazer subir tambem, nem é tão dificil.
Engine atualizada, espero que a pirraça acabe aki
DOWNLOAD
a inteligencia artificial tem alguns erros, mais só coloquei aí pra verem como funciona.
Re: Tutorial de gravidade e movimento em rampas
Bom, mas tem o problema que se tu colocar qualquer coisa no evento de colisão com algum solido, ele não poderá passar através da mascara dele, ao menos que ele esteja com o solid em zero.
Eu gosto de usar as mesmas colisões do jogador ao inimigo(não os mesmos códigos, mas parecido).
Eu gosto de usar as mesmas colisões do jogador ao inimigo(não os mesmos códigos, mas parecido).
Tópicos semelhantes
» Tutorial - Tem dúvidas a respeito de gravidade? Tire-as aqui!
» [Tutorial] Movimento com o Mouse
» Movimento de água [tutorial]
» Tutorial movimento Top Down(Método bussola)
» [Tutorial] FPS + Sistema de Gravidade + Escada
» [Tutorial] Movimento com o Mouse
» Movimento de água [tutorial]
» Tutorial movimento Top Down(Método bussola)
» [Tutorial] FPS + Sistema de Gravidade + Escada
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos