B
Breno Baiardi
Guest
I ve been doing this game for some months, and the colisions were fine. My character used to jump and fall perfectly, without floating or passing trough the ground pixels.
However after some time i realized it is sometimes (only sometimes) walking and standing one pixel over the ground.
In my code i am using the place_meeting function to find if my y+vertical_speed will encounter the obj_wall, and to correct this i ve been trying to use the method were we use the sign(vsp ) to not going too far when falling, but its stopping before touching the object..
(sorry for grammar, brazilian here)
Here I have some code. I would really apreciate if someone helps
However after some time i realized it is sometimes (only sometimes) walking and standing one pixel over the ground.
In my code i am using the place_meeting function to find if my y+vertical_speed will encounter the obj_wall, and to correct this i ve been trying to use the method were we use the sign(vsp ) to not going too far when falling, but its stopping before touching the object..
(sorry for grammar, brazilian here)
Here I have some code. I would really apreciate if someone helps
///Movimento
KEY_LEFT = -keyboard_check(vk_left)
KEY_RIGHT = keyboard_check(vk_right)
KEY_JUMP = keyboard_check_pressed(vk_space)
if !dead{
move = KEY_RIGHT+KEY_LEFT
hsp = move * movespeed
}
if (move!=0){
image_xscale = move
global.side=move
}
//Verificação de chão
if (place_meeting(x,y+1,obj_wall)){
vsp=0
grounded=true
}else{
vsp+=grav;
grounded=false
}
//queda arrumando pixel
if (place_meeting(x,y+vsp,obj_wall)){
var cc;
cc=vsp+1;
while(!place_meeting(x,y+1,obj_wall) and cc>=0) {y+=1;}
grounded = 1;
vsp = 0;
}
//verificação de colisão paredes
if(place_meeting(x+hsp,y,obj_wall)){
while(!place_meeting(x+sign(hsp),y,obj_wall)){
x += sign(hsp);
}
hsp=0
}
//animação somente quando o jogador se move
if grounded and !dead
{
if move!=0{
sprite_index=spr_player_move
image_speed = 0.3;
}
else
{
image_speed = 0.05;
sprite_index=spr_player_idle
}
//PULAR
if (KEY_JUMP){
vsp=-jumpspeed
}
}
else if !dead{
sprite_index=spr_player_move
image_speed = 0;
image_index=0;
if vsp>0{
image_index=2;
}
}
// Pulinho vs pulão
if(keyboard_check_released(vk_space))and(vsp<0){
vsp=0
}
//inrcrementação de movimento
if !dead{
x += hsp
}
else{
sprite_index=spr_player_die
image_speed=0.05
}
y += vsp
KEY_LEFT = -keyboard_check(vk_left)
KEY_RIGHT = keyboard_check(vk_right)
KEY_JUMP = keyboard_check_pressed(vk_space)
if !dead{
move = KEY_RIGHT+KEY_LEFT
hsp = move * movespeed
}
if (move!=0){
image_xscale = move
global.side=move
}
//Verificação de chão
if (place_meeting(x,y+1,obj_wall)){
vsp=0
grounded=true
}else{
vsp+=grav;
grounded=false
}
//queda arrumando pixel
if (place_meeting(x,y+vsp,obj_wall)){
var cc;
cc=vsp+1;
while(!place_meeting(x,y+1,obj_wall) and cc>=0) {y+=1;}
grounded = 1;
vsp = 0;
}
//verificação de colisão paredes
if(place_meeting(x+hsp,y,obj_wall)){
while(!place_meeting(x+sign(hsp),y,obj_wall)){
x += sign(hsp);
}
hsp=0
}
//animação somente quando o jogador se move
if grounded and !dead
{
if move!=0{
sprite_index=spr_player_move
image_speed = 0.3;
}
else
{
image_speed = 0.05;
sprite_index=spr_player_idle
}
//PULAR
if (KEY_JUMP){
vsp=-jumpspeed
}
}
else if !dead{
sprite_index=spr_player_move
image_speed = 0;
image_index=0;
if vsp>0{
image_index=2;
}
}
// Pulinho vs pulão
if(keyboard_check_released(vk_space))and(vsp<0){
vsp=0
}
//inrcrementação de movimento
if !dead{
x += hsp
}
else{
sprite_index=spr_player_die
image_speed=0.05
}
y += vsp