Entrar
Últimos assuntos
» Servidor de Discord do fórum?por Super Games Ontem à(s) 01:27
» Problemas com a caixa de diálogo, ela é pequena e as letras não cabem dentro
por Rukasu777 Qui 16 maio 2024, 18:10
» Problemas com particulas
por RastaMaan Dom 12 maio 2024, 17:03
» Problema ao entrar por uma porta e voltar por ela
por aminaro Seg 06 maio 2024, 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
» 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
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