- Select manual -

8 ways movement

A very simple 8 ways movement setup with a single game object and a script that listens to input and updates the game object position accordingly.

input bindings



function init(self)
    msg.post(".", "acquire_input_focus") 
    self.vel = vmath.vector3()     

function update(self, dt)
    local pos = go.get_position() 
    pos = pos + self.vel * dt 
    self.vel.x = 0 
    self.vel.y = 0

function on_input(self, action_id, action)
    if action_id == hash("up") then
        self.vel.y = 150 
    elseif action_id == hash("down") then
        self.vel.y = -150
    elseif action_id == hash("left") then
        self.vel.x = -150 
    elseif action_id == hash("right") then
        self.vel.x = 150
  1. Tell the engine that the current game object ("." is shorthand for that) should receive user input to the function on_input() in its script components.
  2. Construct a vector to indicate velocity. It will initially be zero.
  3. Each frame, get the current position and store in pos.
  4. Add the velocity, scaled to the current frame length. Velocity is therefore expressed in pixels per second.
  5. Set the game object’s position to the newly calculated position.
  6. Zero out the velocity. If no input is given, there should be no movement.
  7. If the user presses “up”, set the y component of the velocity to 150. If the user presses “down”, set the y component to -150.
  8. Similarly, if the user presses “left”, set the x component of the velocity to -150. And finally, if the user presses “right”, set the x component to 150.

If you want to play with these examples, you can get the project on Github.

Do you want to see more examples? Why not write a few yourself and submit a pull request? We love contributions.