Difference between revisions of "Love - Using a TMX Map"

From TRCCompSci - AQA Computer Science
Jump to: navigation, search
(Other Options)
(Setup)
Line 26: Line 26:
 
   scale = 2 -- Adjust zoom with this
 
   scale = 2 -- Adjust zoom with this
 
    
 
    
   image=love.graphics.newImage("Maps/test.png")
+
   image=love.graphics.newImage("Maps/test.png") --Image to use for player
 +
 
 +
  -- This will go through the layers in the map, find the object layer and the player object
 
   for _, layer in pairs(map.layers) do
 
   for _, layer in pairs(map.layers) do
 
   if layer.class == "ObjectLayer" then
 
   if layer.class == "ObjectLayer" then
Line 36: Line 38:
 
map.camera:update()
 
map.camera:update()
 
player=obj
 
player=obj
end
 
if obj.type == "Test" then
 
print(obj.name)
 
obj.texture = image
 
 
end
 
end
 
end
 
end
Line 86: Line 84:
 
end
 
end
 
</syntaxhighlight>
 
</syntaxhighlight>
 
  
 
=Other Options=
 
=Other Options=

Revision as of 16:32, 29 December 2020

Advanced Tiled Loader

Have a look at his GitHub repository:

Advanced-Tiled-Loader

It was initially an abandoned project, but with a little bit of work is fully working again. It will be suitable for students creating an RPG style game.

Setup

You can download the zip file from this link: download

Extract the zip and copy the 'Advanced-Tiled-Loader' folder into your LOVE project folder (same directory as the 'main.lua').

In your TMX map, create an object on an object layer called 'Player'.

Copy this code for the 'main.lua'

local player = nil
function love.load()
 
  local loader = require("Advanced-Tiled-Loader.Loader")
  loader.path = "Maps/"  --Change this to wherever your .tmx files are
  map = loader.load("untitled.tmx") --Change this to the name of your mapfile
  tx = 0
  ty = 0
  scale = 2 -- Adjust zoom with this
  
  image=love.graphics.newImage("Maps/test.png") --Image to use for player

  -- This will go through the layers in the map, find the object layer and the player object
  for _, layer in pairs(map.layers) do
   if layer.class == "ObjectLayer" then
		for _, obj in pairs(layer.objects) do
			if obj.name == "Player" then 
				print(obj.name)
				obj.texture = image
				map.camera.Object=obj
				map.camera:update()
				player=obj
			end
		end
   end
  end
end

function love.draw()
  local ftx, fty = math.floor(tx), math.floor(ty)
  love.graphics.push()
  love.graphics.scale(scale)
  love.graphics.translate(ftx, fty)
  map:draw()
  love.graphics.pop()
end

function love.update(dt)
	local difx = 0
	local dify = 0
	change = false
	
	if love.keyboard.isDown("up") then 
		dify=100*dt 
		change = true
		end
	if love.keyboard.isDown("down") then 
		dify = -100*dt
		change = true		
		end
	if love.keyboard.isDown("left") then 
		difx= 100*dt 
		change = true
		end
	if love.keyboard.isDown("right") then 
		difx= -100*dt 
		change = true		
		end
	
	player.x = player.x-difx
	player.y = player.y-dify
	
	if change==true then
		map:forceRedraw()
		end

end

Other Options

For example the STI project: STI

Setup tutorial: Tutorial