Obrigado por visitar a The Game Makers Brasil Use o fórum de Dúvidas para fazer perguntas. Se está em busca de aprender dê uma olhada nos tutoriais. |
Adaptar ao jump through
Adaptar ao jump through
Como faço pra adaptar esse código pra fazer o player pular entre plataformas?
repeat(abs(vel_y)) {
if (!place_meeting(x,y+sign(vel_y),obj_solido) {
y += sign(vel_y);
}
else {
vel_y = 0;
}
}
Tentei de três maneiras e não consegui fazer dar certo. Alguém pode me ajudar?
repeat(abs(vel_y)) {
if (!place_meeting(x,y+sign(vel_y),obj_solido) {
y += sign(vel_y);
}
else {
vel_y = 0;
}
}
Tentei de três maneiras e não consegui fazer dar certo. Alguém pode me ajudar?
- Chuaschinai
- Colaborador
- Reações: 6
- Mensagens: 198
-
Re: Adaptar ao jump through
As plataformas são fixas ou estão em movimento?.
No código só esta faltando um parênteses para fechar a linha do place_meeting.
Testa de novo e vê o no que dá.
No código só esta faltando um parênteses para fechar a linha do place_meeting.
Testa de novo e vê o no que dá.
Código: Selecionar todos
// STEP
vel_y += 0.25; // Gravidade
repeat(abs(vel_y)) {
if (!place_meeting(x, y+sign(vel_y), obj_solid)) {
y += sign(vel_y);
}else {
vel_y = 0;
}
}
// Pulo
if(keyboard_check(ord("W")) && place_meeting(x, y+1, obj_solid)) {
vel_y = -7;
}
Re: Adaptar ao jump through
Sim. A plataforma through é fixa
Meu código completo é esse aqui:
step:
Esse é o código padrão que to usando pra fazer a colisão vertical, no entanto tentei modificar pra poder fazer o jump through
Aqui a modificação:
Ele meio que funciona. Porém quando a plataforma jumpthru tá muito alta e ele colide automaticamente o player da um pulo, e tambem o player fica preso quando colide na horizontal, o movimento vertical para e o player fica la preso
Meu código completo é esse aqui:
step:
Código: Selecionar todos
var dir, esq, cim;
dir = keyboard_check(vk_right);
esq = keyboard_check(vk_left);
cim = keyboard_check_pressed(vk_up);
var chao = place_meeting(x,y+1,obj_solido);
var chao1 = place_meeting(x,y+1,obj_jumpthru)
//gravidade e colisão com o chão
if (chao || chao1){
if (cim) {vspd = -pulf;}
} else{
vspd += grav;
}
//velocidade de movimento
hspd = mspd*(r-l)
//colisão horizontal
repeat(abs(hspd)){
if (!place_meeting(x+sign(hspd), y, obj_solido)){
x += sign(hspd);
} else{
hspd = 0;
}
}
//colisão vertical
repeat(abs(vspd)){
if (!place_meeting(x, y+sign(vspd), obj_solido)){
y += sign(vspd);
} else{
vspd = 0;
}
}
Aqui a modificação:
Código: Selecionar todos
repeat(abs(vspd)){
if (!place_meeting(x, y+sign(vspd), obj_solido)){
if (vspd>0 && place_meeting(x, y+sign(vspd), oj_solido)){
vspd = 0;
} else{
y += sign(vspd);
}
} else{
vspd = 0;
}
}
- Chuaschinai
- Colaborador
- Reações: 6
- Mensagens: 198
-
Re: Adaptar ao jump through
Foi mal só deu pra responder agora de tarde.
Entendi seu problema agora, fiz um código rapidão meio na gambiarra mas parece funcionar.
Dei uma comentada meio cagada nele, mas da pra entender quando colar no Gamemaker.
Entendi seu problema agora, fiz um código rapidão meio na gambiarra mas parece funcionar.
Dei uma comentada meio cagada nele, mas da pra entender quando colar no Gamemaker.
Código: Selecionar todos
var _velocidade = 4;
vspd += 0.25;
hspd = (keyboard_check(vk_right) - keyboard_check(vk_left)) * _velocidade;
//colisão horizontal
if(place_meeting(x+hspd, y, obj_solido)) {
while(!place_meeting(x+sign(hspd), y, obj_solido)) x+=sign(hspd);
//Checa se há um objeto colidindo com a borda inferior da mask da sprite
//Se sim ele colidirá horizontalmente com solido, se estiver no chão
if(vspd == 0 && place_meeting(x, bbox_bottom+1, obj_solido))
hspd = 0;
}
x += hspd;
//colisão vertical
if(vspd > 0) {
// Aqui faço a colisão vertical com o instance_place ao invés do place_meeting
// com o id obtido eu checo a posição do solido em comparação a borda
// inferior da mask do player, fazendo com que ele colida somente se
// estiver a cima do obj_solido
var _solido = instance_place(x, y+vspd, obj_solido);
if(_solido != noone) {
if(_solido.y > bbox_bottom) {
while(_solido == noone) {
y += sign(vspd);
_solido = instance_place(x, y+sign(vspd), obj_solido);
}
vspd = 0;
}
}
}
y += vspd;
// Aqui ele tambem só pula se realmente estiver no chão
var in_floor = instance_place(x, bbox_bottom+1, obj_solido);
if(in_floor != noone) {
if(keyboard_check(vk_up) && vspd == 0 && in_floor.bbox_top == bbox_bottom+1)
vspd = -7;
}
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes