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
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).