Graf
Может проблема в самой логике?
ну вот что-то в проверке нажатий, наверное и не так. Ибо оно от части работает как нужно, но только если использовать определенные клавиши. То есть, зажать W, а потом S - он поедет вниз.
А если зажать D, а потом W, то он будет так же ехать в направлении D