Anuncios Google

[Proyecto][Onelua] Ayuda Con Juego de plataformas!

Hola, Despues de un buen rato de codear un mini test, sobre este tema, me encuentro con que no entiendo bien como hacer colisiones...

Me explico, Usando el Oneluav4, estoy probando este code..

--Tables (Maps)
dofile("Tile_Maps.lua")
 
BKG=image.load("BKG.png")
 
Map0=image.load("BKG_Back_Tileset.png")
if Map0 then maps0=map.new(Map0,tabla0,16,16) end
 
Map1=image.load("BKG_Front_Tileset.png")
if Map1 then maps1=map.new(Map1,tabla1,16,16) end
 
function newPlayer()
	local obj = {
		x = 0,
		y = 0,
		h = 0,
		s = 0,
		dir = false,
		-- size of tile player
		ws = 20,
		hs = 36,
		data = image.load("sprites.png",20,36),
		crono = timer.new(),
		jump_enable = true,
		map_sizeW = 0,
		map_sizeH = 0,
	}
	obj.crono:start()
	function obj:MapSize(w,h)
		obj.map_sizeW = w
		obj.map_sizeH = h
	end
	function obj:xy(x,y)
		obj.x = (x or obj.x)
		obj.y = (y or obj.y)
	end
	function obj:walking(xm,ym)
		if buttons.released.right then
			obj.s = 0
		end
		if buttons.cross and obj.jump_enable then
			obj.jump_enable = false
		end
		if buttons.held.right then
			if obj.dir then
				image.flipv(obj.data)
				obj.dir = not obj.dir
			end
			local mtw = 16 -- tile size map
			local mth = 16 -- tile size map
			tx = math.floor(((obj.x+obj.ws) + xm) / (obj.map_sizeW/16))
			ty = math.floor(((obj.y+obj.hs) + ym) / (obj.map_sizeH/16))
			if tabla1[tx][ty] == 20 then -- todo el problema radica en estos index :P :-/
				return nil
			end
			if obj.crono:time()> 16 then
				obj.crono:reset(); 
				obj.crono:start();
				obj.s = obj.s + 1 
				if obj.s > 2 then
					obj.s = 0
				end
				obj.x = obj.x + 4
				if obj.x > 240 then
					obj.x = 240
					return 2
				end
				return 1
			end
		end
		if buttons.held.left then
			if not obj.dir then
				image.flipv(obj.data)
				obj.dir = not obj.dir
			end
			if obj.crono:time()> 32 then
				obj.crono:reset(); 
				obj.crono:start();
				obj.s = obj.s + 1 
				if obj.s > 2 then
					obj.s = 0
				end
				obj.x = obj.x - 4
				if obj.x < 10 then
					obj.x = 10
					return -2
				end
				return -1
			end
		end
	end
	--obj.data:resize(17*1.5,31*1.5)
	function obj:draw()
		obj.data:blitsprite(obj.x,obj.y+obj.h,obj.s)
		if not obj.jump_enable then 
			obj.h = obj.h - 4
			if obj.h < -75 then obj.jump_enable = true end
		else
			if obj.h < 0 then 
				obj.h = obj.h + 4
			end
		end
	end
	return obj
end
Luigui = newPlayer()
Luigui:xy(10,187)
Luigui:MapSize(map.sizex(maps1),map.sizey(maps1))
x,y=0,0
xx,yy=0,0
while true do
buttons.read()
 
--blitear el fondo
image.blit(BKG,0,0)
 
--Blitear el mapa de detras
map.blit(maps0,x,160)
 
--Blitear el mapa de delante
map.blit(maps1,xx,160)
 
 
local move_back = Luigui:walking(xx,160)
if move_back then
	x=x+(1*move_back)
	xx=xx+(2*move_back)
end
Luigui:draw()
screen.flip()
end

Realmenten no entiendo como hacer el calculo para obtener los index en el array del map, y saber si el tile es solido o es nada.. en este caso el solido con el que chocariamos caminando hacia la derecha creo seria el tile 20 :P

Code completo por si gustan probar :)

Descargar!

Espero realmente ayuda de la comunidad, claro, que esos coders entre las sombras me den una mano xD

Este post es para propositos simplemente educacionales!

 




 


Anuncios Google