Hello!
I have just started working on a little metroidvania-style platformer. I started by following the platformer tutorial on [youtube]Youtube[https://www.youtube.com/watch?v=q6c6DvGK4lg&list=PLyhkEEoUjSQtUiSOu-N4BIrHBFtLNjkyE] and looking at some carts here.
I want to have different rooms connected by doors, which I have all drawn in the map editor. But apparently I don't understand how the map() function works.
I have one rooms that stretches from the map cells x000/y000 to x063/y015 and another smaller one below that from x000/y016 to x026/y022. I have a simple camera function like this:
function update_cam(m_start, m_end) cam_x=plr.x-64+(plr.w/2) cam_y=plr.y-64+(plr.w/2) if cam_x<m_start then cam_x=m_start end if cam_x>m_end-128 then cam_x=m_end-128 end camera(cam_x,cam_y) end |
I have collision checks done like this:
function collide_map(obj,aim,flag) -- obj = table needs x,y,w,h -- aim = left,right,up,down local x=obj.x local y=obj.y local w=obj.w local h=obj.h local x1=0 local y1=0 local x2=0 local y2=0 if aim=="left" then x1=x-1 y1=y x2=x y2=y+h-1 elseif aim=="right" then x1=x+w-1 y1=y x2=x+w y2=y+h-1 elseif aim=="up" then x1=x+2 y1=y-1 x2=x+w-3 y2=y elseif aim=="down" then x1=x+2 y1=y+h x2=x+w-3 y2=y+h end --pixels to tiles x1/=8 y1/=8 x2/=8 y2/=8 if fget(mget(x1,y1), flag) or fget(mget(x1,y2), flag) or fget(mget(x2,y1), flag) or fget(mget(x2,y2), flag) then return true else return false end end |
And so far I'm calling the map function like this:
map(0, 0, 0, 0, 64, 32) |
which will draw the upper portion of the map. But when I tested just drawing the portion with the second room like this:
map(0, 16, 0, 0, 64, 32) |
the correct portion would be drawn but I still have the collisions from map(0, 0, 0, 0, 64, 32)
. They player will seeming hang in the air and collide with invisible parts of the map. Can someone explain to me what is goind wrong?
You are only drawing the map- Your player still exists at first portion, with the map tiles in the same spot. If you can, I would reccomend just calling map()
with no arguments, as that shows the entire map. You could also, when doing collision checks, add the offsetted amount. Hope this helps.
look at the camera
function to change what’s drawn on screen without messing up map coordinates for mget!
I warmly recommend working through https://mboffin.itch.io/pico8-educational-toolset (the ones related to camera and map)
Thank you two. I think both of you gave me some good clues :).
[Please log in to post a comment]