try this: from euclid import Vector2
def input_loop(): """your events input""" newloc = Vector2(0,0) # euclid keys = pygame.key.get_pressed() # get player's wanted location if keys[K_UP]: newpos.y -= 1 if keys[K_DOWN]: newpos.y += 1 if keys[K_LEFT]: newpos.x -= 1 if keys[K_RIGHT]: newpos.x += 1 # check if new tile is a collision if not map.collide(newpos): player.move(newpos) if you want to exclude diagonal movement on purpose, add an extra check: #force no diagonal movement if x != 0 and y != 0: y = 0 In the above code, 'map' would be your map class, and .collide(x,y) will check if it would be a collision to walk onto tile x,y. player.move(x,y) sets player location to x,y. Note: If you want to pass a Vector2 to a function that is expecting two values "x,y" instead of a vector, add a '*' infront of the variable: v = Vector2(1,2) some_func( *v ) it causes the equivalent of: some_func( v.x, v.y ) -- Jake