Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Tiny level editor

edited March 2015 Posts: 175

Hello guys, today i want share to community my first and very tiny level editor
Code:

displayMode(FULLSCREEN)
-- Use this function to perform your initial setup
function setup()
lvl = {1,2,3,0,
0,2,0,0,
0,2,0,0}
pos = {}
local nrow = 0
for k,v in pairs(lvl) do
if math.fmod(k,4) == 0 then
nrow = nrow + 1
end
if v == 0 then
table.insert(pos,vec2(-200,-200))
else
table.insert(pos,vec2(WIDTH/4+(v)*100,HEIGHT/2-nrow*100))
end
end

end

-- This function gets called once every frame
function draw()
-- This sets a dark background color
background(40, 40, 50)
for k,v in pairs(pos) do
--rect(v.x,v.y,512/4,512/4)
sprite("Platformer Art:Crate",v.x,v.y,512/4,512/4)
end
-- Do your drawing here
strokeWidth(5)
end

function touched(t)

end

Little explaining :
You have table "lvl", which store information, where is your ground
Table "pos" store converted numbers to coordinates from table "lvl"

In this code you can make 3x3 field, if you want make 4x4 or 5x5 (and so on) you must fill last column with 0 , so you 4x4 field
would be

lvl = {1,2,3,4,0,
1,2,3,4,0,
1,2,3,4,0}

And you must change number on this method to amount numbers in your table lvl , including column filled with zeros

math.fmod(k,4) == 0

How can you see on the top, i formatted form of lvl table . In my example code you would see T-map , so imagine this numbers are blocks.

P.s sorry for my bad explanation, if something is not clear for you, ask me in this thread or pm

Upd:

--# Main displayMode(FULLSCREEN) -- Use this function to perform your initial setup function setup() lvl1 = Lvl1() lvl2 = Lvl2() lvl3 = Lvl3() lvl4 = Lvl4() lvl5 = Lvl5() timer = 0 end -- This function gets called once every frame function draw() -- This sets a dark background color background(40, 40, 50) timer = timer + DeltaTime if timer <= 2 then lvl1:draw() elseif timer > 2 and timer < 4 then lvl2:draw() elseif timer > 4 and timer < 6 then lvl3:draw() elseif timer > 6 and timer < 8 then lvl4:draw() elseif timer > 8 and timer < 10 then lvl5:draw() elseif timer > 10 then timer = 0 end -- Do your drawing here end function touched(t) end --# Lvl1 Lvl1 = class() function Lvl1:init() -- you can accept and set parameters here self.lvl = {0,2,0,0, 0,2,0,0, 0,2,0,0, 0,2,0,0, 0,2,0,0, 0,2,0,0} self.pos = {} local nrow = 0 for k,v in pairs(self.lvl) do if math.fmod(k,4) == 0 then nrow = nrow + 1 end if v == 0 then table.insert(self.pos,vec2(-100,-100)) else table.insert(self.pos,vec2((v)*100,HEIGHT-100-nrow*100)) end end end function Lvl1:draw() -- Codea does not automatically call this method for k,v in pairs(self.pos) do sprite("Platformer Art:Block Grass",v.x,v.y,512/5,512/5) end end function Lvl1:touched(touch) -- Codea does not automatically call this method end --# Lvl2 Lvl2 = class() function Lvl2:init(x) -- you can accept and set parameters here self.lvl = {0,2,3,4,0, 0,2,3,4,0, 0,2,0,4,0, 0,2,3,4,0, 0,2,0,4,0, 0,2,0,4,0} self.pos = {} local nrow = 0 for k,v in pairs(self.lvl) do if math.fmod(k,6) == 0 then nrow = nrow + 1 end if v == 0 then table.insert(self.pos,vec2(-100,-100)) else table.insert(self.pos,vec2((v)*100,HEIGHT-100-nrow*100)) end end end function Lvl2:draw() -- Codea does not automatically call this method for k,v in pairs(self.pos) do sprite("Platformer Art:Block Grass",v.x,v.y,512/5,512/5) end end function Lvl2:touched(touch) -- Codea does not automatically call this method end --# Lvl3 Lvl3 = class() function Lvl3:init(x) -- you can accept and set parameters here self.lvl = {1,2,3,4,5,0, 1,0,3,0,5,0, 1,0,3,4,5,0, 1,2,3,0,5,0, 1,0,3,0,5,0, 1,2,3,4,5,0} self.pos = {} local nrow = 0 for k,v in pairs(self.lvl) do if math.fmod(k,6) == 0 then nrow = nrow + 1 end if v == 0 then table.insert(self.pos,vec2(-100,-100)) else table.insert(self.pos,vec2((v)*100,HEIGHT-100-nrow*100)) end end end function Lvl3:draw() -- Codea does not automatically call this method for k,v in pairs(self.pos) do sprite("Platformer Art:Block Grass",v.x,v.y,512/5,512/5) end end function Lvl3:touched(touch) -- Codea does not automatically call this method end --# Lvl4 Lvl4 = class() function Lvl4:init(x) -- you can accept and set parameters here self.lvl = {1,2,3,4,5,6,0, 0,2,0,0,5,6,0, 0,0,3,4,0,6,0, 0,0,3,4,0,6,0, 0,2,0,0,5,6,0, 1,2,3,4,5,6,0} self.pos = {} local nrow = 0 for k,v in pairs(self.lvl) do if math.fmod(k,7) == 0 then nrow = nrow + 1 end if v == 0 then table.insert(self.pos,vec2(-100,-100)) else table.insert(self.pos,vec2((v)*100,HEIGHT-100-nrow*100)) end end end function Lvl4:draw() -- Codea does not automatically call this method for k,v in pairs(self.pos) do sprite("Platformer Art:Block Grass",v.x,v.y,512/5,512/5) end end function Lvl4:touched(touch) -- Codea does not automatically call this method end --# Lvl5 Lvl5 = class() function Lvl5:init(x) -- you can accept and set parameters here self.lvl = {1,2,3,4,5,0, 1,0,0,0,5,0, 1,0,0,0,5,0, 1,0,3,4,5,0, 1,0,3,0,5,0, 1,2,3,4,5,0} self.pos = {} local nrow = 0 for k,v in pairs(self.lvl) do if math.fmod(k,6) == 0 then nrow = nrow + 1 end if v == 0 then table.insert(self.pos,vec2(-100,-100)) else table.insert(self.pos,vec2((v)*100,HEIGHT-100-nrow*100)) end end end function Lvl5:draw() -- Codea does not automatically call this method for k,v in pairs(self.pos) do sprite("Platformer Art:Block Grass",v.x,v.y,512/5,512/5) end end function Lvl5:touched(touch) -- Codea does not automatically call this method end
Tagged:

• edited March 2015 Posts: 175

Hello guys, i commended this thread , to not mess up forum, so im seek for your help: i have field and hero . And i want make algorithm which will make "walls" around field. How you can see below (hope images attached) there are my thoughts in adobe draw and In-Game view .
http://oi57.tinypic.com/9h52dd.jpg

http://oi62.tinypic.com/29orgjl.jpg

On sketch you can see "t" - its non walking place , on game screen it place with blue box on the top

I know the shortest solution its make my hero by phys.object and make walls, but it will decrease FPS and slow down my project. Maybe i can handle with setContext(), but i have no idea how to make it

• Posts: 5,396

I would simply test the x,y position of the hero, and not let him walk into the "non walking" tiles.

• Posts: 175

@ignatz thank you, i thought about that, but i guess it would be glitchy

• Posts: 2,020
• Posts: 175

@yojimbo2000 thank you alot, now i got it