GameMaker WASD Camera moves smoothly

Dunkelheit

Member
Hi guys, I'm trying to move a camera by WASD on TOP-VIEW style however the camera's movement is weird and sounds like not good. Please take a look at my code and see what I can do to improve it.

Code:
var xcam = camera_get_view_x(view_camera[0]);
var ycam = camera_get_view_y(view_camera[0]);


//camera movement
if keyboard_check(ord("D"))
{
    camera_set_view_pos(view_camera[0], xcam + xspeed, ycam);
} 
else if keyboard_check(ord("A"))
{
    camera_set_view_pos(view_camera[0], xcam - xspeed, ycam);
}

if keyboard_check(ord("W"))
{
    camera_set_view_pos(view_camera[0], xcam, ycam - yspeed);
}
else if keyboard_check(ord("S"))
{
    camera_set_view_pos(view_camera[0], xcam, ycam + yspeed);
}

//clamp the camera inside the room's size
camera_set_view_pos(view_camera[0],
    clamp( camera_get_view_x(view_camera[0]), 0, room_width - camera_get_view_width(view_camera[0]) ),
    clamp( camera_get_view_y(view_camera[0]), 0, room_height - camera_get_view_height(view_camera[0]) )
);
 
G

Guest User

Guest
a necessary question is what do you WANT the camera to do?
 

slayer 64

Member
I would give the camera some speed up and slow down movements.
Code:
var xcam = camera_get_view_x(view_camera[0])
var ycam = camera_get_view_y(view_camera[0])

actualMoveSpeedx+=(keyboard_check(ord("D"))-keyboard_check(ord("A")))*accelerationx
actualMoveSpeedy+=(keyboard_check(ord("S"))-keyboard_check(ord("W")))*accelerationy

camera_set_view_pos(view_camera[0],xcam+actualMoveSpeedx,ycam+actualMoveSpeedy)

actualMoveSpeedx=linearFriction(actualMoveSpeedx,.2)
actualMoveSpeedy=linearFriction(actualMoveSpeedy,.2)

//hit camera edges against the room
if xcam<0
{
    xcam=0
    actualMoveSpeedx=0
}
else if xcam+camera_get_view_width(view_camera[0])>room_width
{
    xcam=room_width-camera_get_view_width(view_camera[0])
    actualMoveSpeedx=0
}
 
Top