J
Jaxon
Guest
v2.1.4.285
I am using a basic collision system(place_meeting) for my 2d platformer. But due to my tileset having to be snapped to the grid(middle centre) for edges to of tile to show. and I use a !visible object that acts as walls and floor. but I have to use 4 different objects to cover the tile's(because of the middle centre alignment). but when I put all objects into my code the game lags(and quits) as soon as a touch the floor or ground(instantly).
my code
[//Get Input
if (hascontrol)
{
key_left = keyboard_check(vk_left) or keyboard_check(ord("A"));
key_right = keyboard_check(vk_right) or keyboard_check(ord("D"));
key_jump = keyboard_check_pressed(vk_space);
}
//Calculate Movement
var move = key_right - key_left;
hsp = move * walksp;
vsp = vsp + grv;
if (place_meeting(x,y + 1, obj_wall)) xor (place_meeting(x,y + 1, obj_wall2)) xor (place_meeting(x,y + 1, obj_wall3)) xor (place_meeting(x,y + 1, obj_wall4)) and (key_jump)
{
vsp = -5;
}
else
{
key_left = 0;
key_right = 0;
key_jump = 0;
}
//Horizontal Collision
if (place_meeting(x + hsp,y,obj_wall)) xor (place_meeting(x + hsp,y,obj_wall2)) xor (place_meeting(x + hsp,y,obj_wall3)) xor (place_meeting(x + hsp,y,obj_wall4))
{
while (!place_meeting(x + sign(hsp),y,obj_wall)) xor (!place_meeting(x + sign(hsp),y,obj_wall2)) xor (!place_meeting(x + sign(hsp),y,obj_wall3)) xor (!place_meeting(x + sign(hsp),y,obj_wall4))
{
x = x + sign(hsp)
}
hsp = 0;
}
x = x + hsp;
//Vertical Collision
if (place_meeting(x,y + vsp,obj_wall)) xor (place_meeting(x,y + vsp,obj_wall2)) xor (place_meeting(x,y + vsp,obj_wall3)) xor (place_meeting(x,y + vsp,obj_wall4))
{
while (!place_meeting(x,y + sign(vsp),obj_wall)) xor (!place_meeting(x,y + sign(vsp),obj_wall2)) xor (!place_meeting(x,y + sign(vsp),obj_wall3)) xor (!place_meeting(x,y + sign(vsp),obj_wall4))
{
y = y + sign(vsp)
}
vsp = 0;
}
y = y + vsp;
//Animation
if (!place_meeting(x,y + 1,obj_wall)) xor (!place_meeting(x,y + 1,obj_wall2)) xor (!place_meeting(x,y + 1,obj_wall3)) xor (!place_meeting(x,y + 1,obj_wall4))
{
sprite_index = spr_player_jump;
image_speed = 0;
if (sign(vsp) > 0)
{
image_index = 1;
}
else
{
image_index = 0;
}
}
else
{
image_speed = 1;
if (hsp == 0)
{
sprite_index = spr_player_still;
}
else
{
sprite_index = spr_player_run;
}
}
if (hsp != 0)
{
image_xscale = sign(hsp);
}]
Sorry about putting 78 lines of code in but I thought (just in case) my movement could be changed as well in the need of a different system.
Thx
I am using a basic collision system(place_meeting) for my 2d platformer. But due to my tileset having to be snapped to the grid(middle centre) for edges to of tile to show. and I use a !visible object that acts as walls and floor. but I have to use 4 different objects to cover the tile's(because of the middle centre alignment). but when I put all objects into my code the game lags(and quits) as soon as a touch the floor or ground(instantly).
my code
[//Get Input
if (hascontrol)
{
key_left = keyboard_check(vk_left) or keyboard_check(ord("A"));
key_right = keyboard_check(vk_right) or keyboard_check(ord("D"));
key_jump = keyboard_check_pressed(vk_space);
}
//Calculate Movement
var move = key_right - key_left;
hsp = move * walksp;
vsp = vsp + grv;
if (place_meeting(x,y + 1, obj_wall)) xor (place_meeting(x,y + 1, obj_wall2)) xor (place_meeting(x,y + 1, obj_wall3)) xor (place_meeting(x,y + 1, obj_wall4)) and (key_jump)
{
vsp = -5;
}
else
{
key_left = 0;
key_right = 0;
key_jump = 0;
}
//Horizontal Collision
if (place_meeting(x + hsp,y,obj_wall)) xor (place_meeting(x + hsp,y,obj_wall2)) xor (place_meeting(x + hsp,y,obj_wall3)) xor (place_meeting(x + hsp,y,obj_wall4))
{
while (!place_meeting(x + sign(hsp),y,obj_wall)) xor (!place_meeting(x + sign(hsp),y,obj_wall2)) xor (!place_meeting(x + sign(hsp),y,obj_wall3)) xor (!place_meeting(x + sign(hsp),y,obj_wall4))
{
x = x + sign(hsp)
}
hsp = 0;
}
x = x + hsp;
//Vertical Collision
if (place_meeting(x,y + vsp,obj_wall)) xor (place_meeting(x,y + vsp,obj_wall2)) xor (place_meeting(x,y + vsp,obj_wall3)) xor (place_meeting(x,y + vsp,obj_wall4))
{
while (!place_meeting(x,y + sign(vsp),obj_wall)) xor (!place_meeting(x,y + sign(vsp),obj_wall2)) xor (!place_meeting(x,y + sign(vsp),obj_wall3)) xor (!place_meeting(x,y + sign(vsp),obj_wall4))
{
y = y + sign(vsp)
}
vsp = 0;
}
y = y + vsp;
//Animation
if (!place_meeting(x,y + 1,obj_wall)) xor (!place_meeting(x,y + 1,obj_wall2)) xor (!place_meeting(x,y + 1,obj_wall3)) xor (!place_meeting(x,y + 1,obj_wall4))
{
sprite_index = spr_player_jump;
image_speed = 0;
if (sign(vsp) > 0)
{
image_index = 1;
}
else
{
image_index = 0;
}
}
else
{
image_speed = 1;
if (hsp == 0)
{
sprite_index = spr_player_still;
}
else
{
sprite_index = spr_player_run;
}
}
if (hsp != 0)
{
image_xscale = sign(hsp);
}]
Sorry about putting 78 lines of code in but I thought (just in case) my movement could be changed as well in the need of a different system.
Thx