R
rustymiester
Guest
Been following a video tutorial on youtube with FriendlyCosmonaut creating a character movement and collision with animations but my character is forever facing up and doing an animation walk cycle, i press key left or right and it wont change. why is this? i tried following the tutorial closely and repeated a few times to find mistakes but cant find why also my shadow is offset even though i place x,y.
hope that makes sense, cause i have no idea whats going on, let me know if you need anything else, hope someone can help!
Code:
///obj_player create event
///@description
w_spd = 1;
n_spd = 2;
r_spd = 3;
x_frame = 1;
y_frame = 8;
x_offset = sprite_get_xoffset(mask_index);
y_offset = sprite_get_yoffset(mask_index);
spr_base = male_1;
spr_torso = male_torso_shirt_white;
spr_legs = male_legs_pants_teal;
spr_hair = male_hair_messy_raven;
spr_feet = male_feet_shoes_black;
spr_shadow = spr_character_shadow;
facing = 0;
Code:
///obj_player step event
//UPDATE INPUT
input_left = keyboard_check(vk_left);
input_right = keyboard_check(vk_right);
input_up = keyboard_check(vk_up);
input_down = keyboard_check(vk_down);
input_walk = keyboard_check(vk_control);
input_run = keyboard_check(vk_shift);
//ALTER SPEED
if(input_walk or input_run){
spd = abs((input_walk*w_spd) - (input_run*r_spd));
} else {
spd = n_spd;
}
//RESET MOVE VARIABLES
moveX = 0;
moveY = 0;
//INTENDED MOVEMENT
moveY = (input_down - input_up) * spd;
if(moveY == 0){ moveX = (input_right - input_left) * spd; }
//GET DIRECTION PLAYER IS FACING
if(moveX != 0){
switch(sign(moveX)){
case 1: facing = dir.right; break;
case -1: facing = dir.left; break;
}
} else if(moveY != 0){
switch(sign(moveY)){
case 1: facing = dir.down; break;
case -1: facing = dir.up; break;
}
} else {
facing = -1;
}
//COLLISON
//HORIZONTOL
if(moveX !=0){
if(place_meeting(x+moveX, y, obj_collision)){
repeat(abs(moveX)){
if(!place_meeting(x+sign(moveX), y, obj_collision)){ x += sign(moveX); }
else { break; }
}
moveX = 0;
}
}
//VERTICAL
if(moveY !=0){
if(place_meeting(x, y+moveY, obj_collision)){
repeat(abs(moveY)){
if(!place_meeting(x, y+sign(moveY), obj_collision)){ y += sign(moveY); }
else { break; }
}
moveY = 0;
}
}
//OBJECTS
var inst = instance_place(x,y,obj_transition);
if(inst != noone and facing == inst.playerFacingBefore){
with(game){
if(!doTransition){
spawnRoom = inst.targetRoom;
spawnX = inst.targetX;
spawnY = inst.targetY;
spawnPlayerFacing = inst.playerFacingAfter;
doTransition = true;
}
}
}
//APPLY MOVEMENT
x += moveX;
y += moveY;
Code:
///obj_player draw event
/// @description
var anim_length = 9;
var frame_size = 64;
var anim_speed = 12;
var xx = x-x_offset;
var yy = y-y_offset;
//DRAW SPRITE SHADOW
if(spr_shadow != 1) draw_sprite(spr_shadow, 0, xx,yy); //sprite_image, image no. , x, y;
//DRAW CHARACTER BASE
if(spr_base != -1) draw_sprite_part(spr_base, 0, floor(x_frame)*frame_size, y_frame*frame_size, frame_size, frame_size, xx,yy);
//DRAW CHARACTER FEET
if(spr_feet != -1) draw_sprite_part(spr_feet, 0, floor(x_frame)*frame_size, y_frame*frame_size, frame_size, frame_size, xx,yy);
//DRAW CHARACTER LEGS
if(spr_legs != -1) draw_sprite_part(spr_legs, 0, floor(x_frame)*frame_size, y_frame*frame_size, frame_size, frame_size, xx,yy);
//DRAW CHARACTER SHIRT
if(spr_torso != -1) draw_sprite_part(spr_torso, 0, floor(x_frame)*frame_size, y_frame*frame_size, frame_size, frame_size, xx,yy);
//DRAW CHARACTER HAIR
if(spr_hair != -1) draw_sprite_part(spr_hair, 0, floor(x_frame)*frame_size, y_frame*frame_size, frame_size, frame_size, xx,yy);
//INCREMENT FRAME FOR ANIMATION
if(x_frame + (anim_speed/60) < anim_length) { x_frame += anim_speed/60; }
else { x_frame = 1; }
Code:
///game event Room Start
if(spawnRoom == -1) exit;
obj_player.x = spawnX;
obj_player.y = spawnY;
obj_player.facing = spawnPlayerFacing;
with (obj_player){
switch(facing){
case dir.left: y_frame = 9; break;
case dir.right: y_frame = 11; break;
case dir.up: y_frame = 8; break;
case dir.down: y_frame = 10; break;
case -1: x_frame = 0; break;
}
}
Code:
///game draw gui event
randomize();
room_goto_next();
debug = false;
guiWidth = display_get_gui_width();
guiHeight = display_get_gui_height();
blackAlpha = 0;
spawnRoom = -1;
spawnX = 0;
spawnY = 0;
spawnPlayerFacing = -1;
doTransition = false;
enum dir {
right = 0,
up = 90,
left = 180,
down = 270,
}