[LUA] Pequeño problema

Estoy intentand modificar el codigo del tutorial de LUA para ir aprendiendo, pero he llegado a un momemnto el que no se muestra el texto por pantalla y al intentar meter un fondo me da error. Supongo que sera un chorrada pero me gustari que me ayudarais, gracias

link = {} -- tabla con todos los frames y propiedades de link
link["stay"]={} -- tabla con los frames cuando link está quieto
link["walk"]={} -- tabla con los sprites cuando link se mueve
 
link["stay"]["up"] = image.load("sprites/link_stay_up.png")
link["stay"]["down"] = image.load("sprites/link_stay_down.png")
link["stay"]["right"] = image.load("sprites/link_stay_right.png")
link["stay"]["left"] = image.load("sprites/link_stay_left.png")
 
link["walk"]["up"] = image.loadsprite("sprites/link_walk_up.png",22,27)
link["walk"]["down"] = image.loadsprite("sprites/link_walk_down.png",22,27)
link["walk"]["right"] = image.loadsprite("sprites/link_walk_right.png",22,27)
link["walk"]["left"] = image.loadsprite("sprites/link_walk_left.png",22,27)
 
link.status = "stay" -- al principio estará quieto, luego cuando se presione algo pasará a "walk" y caminará
link.direction = "down" -- que mire hacia abajo, asi "nos ve" xD, los otros serian "up", "left" y "right"
link.x = 10 -- posicion en X en la que se mostrará inicialmente
link.y = 10 -- posicion en Y en la que se mostrará inicialmente
link.w = 22 -- Ancho que ocupa link en pantalla
link.h = 27 -- Alto que ocupa link en pantalla
link.anim = 0 -- cuadro de la animación actual, cuenta desde 0, e irá hasta 10
 
rojo = color.new(255,215,0) -- color que usaremos para los objetos
blanco = color.new(255,255,255)
 
fondo = image.load("sprites/back.png")
 
objetos = {} -- tabla que tendrá los objetos, éstos no serán mas que rectángulos de color rojo
function generar_objetos() -- una función para generar los objetos cada que queramos
	for i=1,3 do
		objetos[i] = {} -- cada objeto, es una tabla con ciertas propiedades:
		objetos[i].w =(20) -- haremos que cada objeto, tenga de ancho de 20 a 30
		objetos[i].h =(30) -- lo mismo con el alto
		objetos[i].x = math.random(0,480-objetos[i].w) -- ahora, cada objeto tiene una posicion en pantalla, en X, va de 0 a 480, pero! el objeto tiene ancho, entonces, para que no se salga de pantalla el límite será 480 - el ancho del objeto (objetos[i].w)
		objetos[i].y = math.random(0,272-objetos[i].h) -- lo mismo que arriba, en Y el límite sería 272, pero el objeto tiene alto (objetos[i].h)
	end
end
 
jugador = {}
function generar_jug()
	for k=1,2 do
		jugador[k] = {}
		jugador[k].m = 5
		jugador[k].p = 0
	end
end
 
function colision(obj1, obj2) -- esta función, verifica si hay colisión o no entre dos objetos, notar que, DENTRO de la función se usan los parámetros que recibe, más adelante, veremos como se usa
	if obj1.x+obj1.w>obj2.x -- borde derecho obj1 > borde izquierdo obj2
	and obj1.x<obj2.x+obj2.w -- borde izquierdo obj1 < borde derecho obj2
	and obj1.y+obj1.h>obj2.y -- borde inferior obj1 > borde superior obj2
	and obj1.y<obj2.y+obj2.h then -- borde superior obj1 < borde inferior obj2
		return true -- retorna verdadero si hay colisión
	end
return false -- si el if no se cumple, viene a esta línea y retorna false, es decir, no hay colisión
end
 
 generar_objetos()
 generar_jug()
 
while true do
	controls.read()
 
	-- código de movimiento de la animación
	if controls.up() or controls.down() or controls.left() or controls.right() then
		link.anim = link.anim + 0.2
		link.status = "walk"
		if math.floor(link.anim)>9 then
			link.anim = 0
		end
	else
		link.anim = 0
		link.status = "stay"
	end
 
	-- código de desplazamiento de nuestro héroe
	if controls.up() then
		link.y=link.y-1
		link.direction = "up"
	elseif controls.down() then
		link.y=link.y+1
		link.direction = "down"
	elseif controls.right() then
		link.x=link.x+1
		link.direction = "right"
	elseif controls.left() then
		link.x=link.x-1
		link.direction = "left"
	end
 
	if link.status=="walk" then -- si no está quieto
		link[link.status][link.direction]:setframe(link.anim) -- que pueda caminar
	end
 
 for i=1,3 do -- for para mostrar los objetos en pantalla
	draw.fillrect(objetos[i].x, objetos[i].y, objetos[i].w, objetos[i].h, rojo) -- mostramos el objeto relleno de color rojo
	if colision(link, objetos[i]) and link.status=="walk" then -- si ha colisionado, y link estaba caminando en el momento de la colisión, hay que contrarrestar el movimiento
		generar_objetos()
		jugador[1].p = jugador[1].p+100
	end
end
 
 if controls.press("cross") then -- si presionamos X
	generar_objetos() -- generamos de nuevo los objetos
end
 
	link.x = math.min(math.max(0,link.x), 480-link.w) -- límite en X dentro de la pantalla
	link.y = math.min(math.max(0,link.y), 272-link.h) -- límite en Y dentro de la pantalla
 
	screen:blit(0,0,fondo)--Aqui esta el error
	link[link.status][link.direction]:blit(link.x,link.y) -- mostrar a link! (al fin xD)
	screen:print(10,10,"Magias "..jugador[1].m.." Puntuacion "..jugador[1].p.." /1000",blanco)--esto no se muestra
 
	screen.flip() -- mostrar cambios en pantalla
end


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

El problema es simple: Estas

El problema es simple: Estas usando funciones de LuaHM (screen:blit y screen:print) cuando el tutorial está pensado para LuaDEV. Debes usar en su lugar las funciones image.blit y screen.print, y de paso leer la documentación de LuaDEV.

Gracias a los dos por la

Gracias a los dos por la ayuda, esta solucionado. Echare un ojo a la documentación y espero poder seguir sin problemas una temporada

En LuaDEV es

En LuaDEV es así fondo:blit(0,0) o image.blit(0,0,fondo).

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.