I've been trying for a day to figure this out and I can't. There's barely any information online about this. Although it feels like everyone knows it but me.
My idea is on initialize to run a nested for loop and add any enemies to a list. And in the update move them.
I did this and it worked! But it incremented in grids. There's no actual code of this since I deleted it, but I could easily reprogram it, if someone asks what the block was.
What do you mean by "incremented in grids?" What's the issue you're trying to resolve?
I mean when I go to move the enemy it increments the position in a grid. Meaning it's not smooth at all.
Without an example its hard to visualise. Can you supply a cart to look at (or just sample code) ?
I imagine you're moving the enemies as tiles on the map using mset()
but this will be restricted (as map tiles are) to the 8x8 grid. Instead, you'll want to create the enemies as objects separate from the map (like your player, probably) using the map tile coords (times 8) as their starting positions.
I made it more readable for you guys but here is a good replication of what it looked like.
-- enemies enemies={} function init_en() -- check screen for any tile with a flag of 7 for y=0,128 do for x=0,128 do if fget(mget(x,y),6) then add(enemies,{x=x,y=y,dir=0}) end end end end function update_en() -- update each enemy's position on the tile map for enemy in all(enemies) do -- clear the current enemy tile mset(enemy.x, enemy.y, 0) -- update the position based on direction if enemy.dir == 0 then enemy.x -= .01 elseif enemy.dir == 1 then enemy.x += .01 end -- change direction at boundaries if enemy.x < 0 then enemy.x = 127 elseif enemy.x > 127 then enemy.x = 0 end -- set the enemy tile at the new position mset(enemy.x, enemy.y, 1) end end |
[Please log in to post a comment]