moveCharacter() Function Reference

moveCharacter(string name, integer x, integer y, string sequence, integer speed[, function callback])

Moves a character to a specific tile using A* path-finding algorithms to traverse the map. Sequence should refer to an animation set, and speed is the time taken to move between each tile. A speed of 60 is approximately 1 second if running at 60fps, or 2 seconds at 30fps.

Optionally you can pass a callback function to run every time the character passes to a new tile on the route. Useful for checking if the character has bumped into an NPC for example.


	local qiso = require "plugin.qisoengine"
	qiso.setAssetsFolder("assets")
	qiso.loadTiledMap("sample-tilemap")

	-- Load a spritemap for use as a character. Sequences must be given compass names, like this...
	-- Dummy character asset can be downloaded from the Qiso website.
	local playerMap = graphics.newImageSheet(qiso.getAssetsFolder() .. "/dummy.png", { width = 256, height = 512, numFrames = 64, border = 0 })
	local playerSprites = {
		{ name = 'standing-north', frames = { 25 } },
		{ name = 'standing-north-east', frames = { 17 } },
		{ name = 'standing-east', frames = { 9 } },
		{ name = 'standing-south-east', frames = { 1 } },
		{ name = 'standing-south', frames = { 57 } },
		{ name = 'standing-south-west', frames = { 49 } },
		{ name = 'standing-west', frames = { 41 } },
		{ name = 'standing-north-west', frames = { 33 } },

		{ name = 'walking-north', frames = { 25, 26, 27, 28, 29, 30, 31, 32 }, time = 750, loopCount = 0, loopDirection = 'forward' },
		{ name = 'walking-north-east', frames = { 17, 18, 19, 20, 21, 22, 23, 24 }, time = 750, loopCount = 0, loopDirection = 'forward' },
		{ name = 'walking-east', frames = { 9, 10, 11, 12, 13, 14, 15, 16 }, time = 750, loopCount = 0, loopDirection = 'forward' },
		{ name = 'walking-south-east', frames = { 1, 2, 3, 4, 5, 6, 7, 8 }, time = 750, loopCount = 0, loopDirection = 'forward' },
		{ name = 'walking-south', frames = { 57, 58, 59, 60, 61, 62, 63, 64 }, time = 750, loopCount = 0, loopDirection = 'forward' },
		{ name = 'walking-south-west', frames = { 49, 50, 51, 52, 53, 54, 55, 56 }, time = 750, loopCount = 0, loopDirection = 'forward' },
		{ name = 'walking-west', frames = { 41, 42, 43, 44, 45, 46, 47, 48 }, time = 750, loopCount = 0, loopDirection = 'forward' },
		{ name = 'walking-north-west', frames = { 33, 34, 35, 36, 37, 38, 39, 40 }, time = 750, loopCount = 0, loopDirection = 'forward' }
	}

	-- Add a character at tile 6x8 using the dummy spritemap, and then focus the camera on that tile.
	qiso.addCharacter("Player", playerMap, playerSprites, "standing", 6, 8)
	qiso.goTo(6, 8)

	-- Enable the main Qiso loop to render/update our world
	qiso.activate()

	-- Walk the player to the tapped tile
	function tapTile(event)
		-- Get the tile located where the screen was tapped. If there is no tile here, getTile returns nil.
		local tile = qiso.getTile(event.x, event.y)

		if(tile ~= nil) then
			-- path-find to the tapped location, using the walking sequences defined above.
			qiso.moveCharacter("Player", tile.x, tile.y, "walking", 60)
		end
	end

	-- Do something when the screen is tapped
	Runtime:addEventListener('tap', tapTile)