offsetSpriteFromAltitude(integer frame, integer offset)
When a tile is given an altitude, (refer to the setTileAltitude() function), all sprites belonging to that tile are rendered at that altitude by default, allowing for example the same grass sprite to be used for tiles at the top and bottom of hills.
offsetSpriteFromAltitude() allows you to define an amount to offset this by. If for example your sprite is of a cube 30px tall, you can set an offset of -30 to move the cube 30px down from the tiles altitude, allowing a player at that altitude to stand on top of the cube. Or if the sprite is of a cloud, you could apply an offset of 100 to move it up above the tiles altitude.
Put simply, the offset amount should usually be the number of pixels from the base of the sprite to the position characters should naturally stand, but as a negative value.
local qiso = require "plugin.qisoengine"
qiso.setAssetsFolder("assets")
qiso.loadTiledMap("sample-tilemap")
-- Increase the altitude of tile 6x8 by 30px, so that characters are positioned 30px higher up on this tile.
qiso.setTileAltitude(6, 8, 30)
-- Hill pieces for example might have an altitude of 30 so that characters walk up them on entry, but their sprite still needs rendering at 0, so apply a -30 offset.
qiso.offsetSpriteFromAltitude(8, -30)
-- 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", 1000)
end
end
-- Do something when the screen is tapped
Runtime:addEventListener('tap', tapTile)