M
Mr.Meow.Games
Guest
I have a problem with the movement code in a top-view rpg I am working on, when the player presses up and right/left or down and left/right the player begins moving much much faster also the player will continue moving in the right-up direction even when i release one of the keys, I would like help on both of theses problems sorry for sounding like a pest, Here is my player move code:
///Platform Physics
var rkey = keyboard_check(vk_right)
var ukey = keyboard_check(vk_up)
var lkey = keyboard_check(vk_left)
var dkey = keyboard_check(vk_down)
//Moving Up
if (ukey) {
vspd = -spd
}
//Moving Down
if (dkey) {
vspd = spd
}
//Moving to the right
if (rkey) {
hspd=spd
}
//Moving Left
if (lkey) {
hspd = -spd
}
//Check for not moving
if ((!rkey && !lkey && !ukey && !dkey) || (rkey && lkey) || (ukey && dkey)) {
hspd=0
vspd = 0
}
//horizontal collisions
if (place_meeting(x+hspd, y, obj_wall)) {
while (!place_meeting(x+sign(hspd), y, obj_wall)) {
x+= sign(hspd)
}
hspd=0
}
//Move Horizontally
x+=hspd
//Vertiacal collisions
if (place_meeting(x, y+vspd, obj_wall)) {
while (!place_meeting(x, y+sign(vspd), obj_wall)) {
y+= sign(vspd)
}
vspd=0
}
//Move Verticaally
y+=vspd
//control sprites
if(yprevious != y) {
sprite_index= spr_player
image_speed= 0
image_index = y>yprevious
}else{
if (xprevious != x) {
sprite_index=spr_player_walk
image_speed=.2
}else{
sprite_index=spr_player
}
}
//control direction
if(xprevious < x) {
image_xscale=1
}else if (xprevious > x) {
image_xscale=-1
}
///Platform Physics
var rkey = keyboard_check(vk_right)
var ukey = keyboard_check(vk_up)
var lkey = keyboard_check(vk_left)
var dkey = keyboard_check(vk_down)
//Moving Up
if (ukey) {
vspd = -spd
}
//Moving Down
if (dkey) {
vspd = spd
}
//Moving to the right
if (rkey) {
hspd=spd
}
//Moving Left
if (lkey) {
hspd = -spd
}
//Check for not moving
if ((!rkey && !lkey && !ukey && !dkey) || (rkey && lkey) || (ukey && dkey)) {
hspd=0
vspd = 0
}
//horizontal collisions
if (place_meeting(x+hspd, y, obj_wall)) {
while (!place_meeting(x+sign(hspd), y, obj_wall)) {
x+= sign(hspd)
}
hspd=0
}
//Move Horizontally
x+=hspd
//Vertiacal collisions
if (place_meeting(x, y+vspd, obj_wall)) {
while (!place_meeting(x, y+sign(vspd), obj_wall)) {
y+= sign(vspd)
}
vspd=0
}
//Move Verticaally
y+=vspd
//control sprites
if(yprevious != y) {
sprite_index= spr_player
image_speed= 0
image_index = y>yprevious
}else{
if (xprevious != x) {
sprite_index=spr_player_walk
image_speed=.2
}else{
sprite_index=spr_player
}
}
//control direction
if(xprevious < x) {
image_xscale=1
}else if (xprevious > x) {
image_xscale=-1
}