S
Shadowblitz16
Guest
does anybody know why I can't offset my player when I flip him?
he flips he just doesn't change position.
here is my code
it acts like I am resetting my x somewhere but I'm not.. i don't think.
he flips he just doesn't change position.
here is my code
Code:
/// @description Link Step Event
// You can write your code in this editor
x = px;
y = py;
//Update Link Here.
//Horizontal Collision
hitbox_top = bbox_top //y - sprite_get_yoffset(sprite_index)// sprite_get_bbox_top(sprite_index) - sprite_get_yoffset(sprite_index);
hitbox_left = bbox_left //x - sprite_get_xoffset(sprite_index)// sprite_get_bbox_left(sprite_index) - sprite_get_xoffset(sprite_index);
hitbox_right = bbox_right+1 //x + sprite_get_xoffset(sprite_index)// sprite_get_bbox_right(sprite_index) - sprite_get_xoffset(sprite_index);
hitbox_bottom = bbox_bottom+1
hitbox_middle = hitbox_left + (hitbox_right - hitbox_left) / 2;
hitbox_center = hitbox_top + (hitbox_bottom - hitbox_top) / 2;
if (debug) state = LS_DEBUG;
switch(state)
{
case LS_DEBUG: link_debug();
case LS_IDLE: link_state_idle(); break;
case LS_WALK: link_state_walk(); break;
case LS_JUMP: link_state_jump(); break
}
//if (!instance_exists(Level)) return;
//perform_tile_collision(Level, x, y, hsp, vsp);
x += xspd;
y += yspd;
px = x;
py = y
x = floor(x);
y = floor(y);
Code:
/// @description link_state_idle()
if (Input.a)
{
state = LS_JUMP;
sprite_index = spr_link_duck;
image_index = 1;
image_speed = 1;
}
if (Input.left)
{
state = LS_WALK;
sprite_index = spr_link_walk;
image_index = 1;
image_speed = 1;
flip(-1)
}
if (Input.right)
{
state = LS_WALK;
sprite_index = spr_link_walk;
image_index = 1;
image_speed = 1;
flip( 1);
}
if (instance_exists(Level))
{
yspd += G_GRAV * (grid_collision_meeting(Level, x, y, 3)) ? grav1_mod : grav2_mod;
if(!noclip) perform_tile_collision(Level, id);
}
Code:
/// @desc flip()
/// @param sign
var signval = argument[0];
if (image_xscale > 0 && signval == -1)
{
image_xscale = -1;
x += sprite_get_width(sprite_index) - sprite_get_xoffset(sprite_index);
}
else if (image_xscale < 0 && signval == 1)
{
image_xscale = 1;
x -= sprite_get_width(sprite_index) - sprite_get_xoffset(sprite_index);
}
show_debug_message("FLIP: "+string(image_xscale));
Code:
/// @desc perform_tile_collision()
/// @arg level
/// @arg object
//Arguments
var level = argument[0];
var object = argument[1];
//Reset collision flags, We are about to check for collision again
object.collision_top = false;
object.collision_left = false;
object.collision_right = false;
object.collision_bottom = false;
//Check horizontal collision
if (grid_collision_meeting(level, object.x+object.xspd, object.y, 1))
{
while (!grid_collision_meeting(level, object.x+object.xspd, object.y, 1))
{
object.x += sign(object.xspd);
}
if (object.xspd >= 0) object.collision_right = true;
else object.collision_left = true;
object.xspd = 0;
}
//Check vertical collision
if (grid_collision_meeting(level, object.x, object.y+object.yspd, 1))
{
while (!grid_collision_meeting(level, object.x, object.y+object.yspd, 1))
{
object.y += sign(object.yspd);
}
if (object.yspd >= 0) object.collision_bottom = true;
else object.collision_top = true;
object.yspd = 0;
}
Code:
///@desc grid_collision_meeting()
///@arg level
///@arg x
///@arg y
///@arg type
var level = argument[0];
var xx = argument[1];
var yy = argument[2];
var type = argument[3];
//Set return to false initaly
value = false;
// Remeber out position
var xp = x;
var yp = y;
// Update the position for the bbox calculations
x = xx;
y = yy;
//Check vertical points
for (var top=bbox_top; top<=bbox_bottom+1; top+=GRID_HEIGHT)
{
var l_meeting = (level.grid[# (bbox_left +0) div GRID_WIDTH, (top) div GRID_HEIGHT] == type)
var r_meeting = (level.grid[# (bbox_right+1) div GRID_WIDTH, (top) div GRID_HEIGHT] == type)
if (l_meeting || r_meeting) { value = true; break; }
}
//Check horizontal points
for (var left=bbox_left; left<=bbox_right+1; left+=GRID_WIDTH)
{
var t_meeting = (level.grid[# (left) div GRID_WIDTH, (bbox_top +0) div GRID_HEIGHT] == type)
var b_meeting = (level.grid[# (left) div GRID_WIDTH, (bbox_bottom+1) div GRID_HEIGHT] == type)
if (t_meeting || b_meeting) { value = true; break; }
}
x = px;
y = py;
//show_debug_message("COLLISION: "+string(value))
return value;
Last edited by a moderator: