Hola primero que todo perdon por el titulo que es un poco malo pero no sabia como
xpresarlo . Bueno aqui os dejo el code :
bgstuff = image.loadsprite("img/1.png",16,16); -- Función Modulo. Devuelve el resto de una división. function mymod(a,b) return ((a) - math.floor((a)/(b))*(b)) end function resizewin(x,y,w,h,tw,th) screenx, screeny, screenw, screenh = x, y, w, h; tilew, tileh = tw, th; dtw, dth = math.ceil(screenw / tilew), math.ceil(screenh / tileh); end function tile2table(filename) local tabla = { } local after, a, b, wid, hei, linetable for linea in io.lines(filename) do linetable = { } while string.find(linea,"|") do a,b = string.find(linea,"|"); after = string.sub(linea,1,a-1); linea = string.sub(linea,b+1); table.insert(linetable,after) end table.insert(linetable,linea); table.insert(tabla,linetable) end return tabla, table.getn(tabla[1]), table.getn(tabla); end function drawBG(tabla,scrollx,scrolly) local spritex, bgcharset, bgcharsetlow, ny, nx, colx, coly, byx, byy resx = mymod(scrollx,tilew); resy = mymod(scrolly,tileh); colx = math.floor(scrollx / tilew) coly = math.floor(scrolly / tileh) byx, byy = dtw, dth; if resx > 0 then byx = byx + 1; end if resy > 0 then byy = byy + 1; end for y = 1, byy do ny = screeny + ((y * tileh) - tileh) - resy; for x = 1, byx do nx = screenx + ((x * tilew) - tilew) - resx; if (y + coly) <= maxY and ( x + colx ) <= maxX then if ( ( nx >= (0 - tilew) ) and ( nx <= (480 + tilew) ) and ( ny >= (0 - tileh) ) and ( ny <= (272 + tileh) ) ) then spritex = tabla[y + coly][x + colx]; bgcharset = string.sub(spritex,1,1); bgcharsetlow = string.sub(spritex,2,#spritex); if bgcharset == "S" then bgstuff:setframe(bgcharsetlow); bgstuff:resize(tilew,tileh); bgstuff:blit(nx,ny); end end end end end end resizewin(0,0,480,272,32,32); sX, sY = 0, 0 -- scroll init position = 0. map, maxX, maxY = tile2table("mapa1.txt") --link link = {} link["stay"]={} link["walk"]={} fondo = image.load("fondo.png") link.stay.up = image.load("sprites/personaje_stay_up.png") link["stay"].down = image.load("sprites/personaje_stay_down.png") link.stay["right"] = image.load("sprites/personaje_stay_right.png") link["stay"]["left"] = image.load("sprites/personaje_stay_left.png") rawset(link["walk"],"up",image.loadsprite("sprites/personaje_walk_up.png",32,48)) rawset(link["walk"],"down",image.loadsprite("sprites/personaje_walk_down.png",32,47)) rawset(link["walk"],"right",image.loadsprite("sprites/personaje_walk_right.png",32,48)) rawset(link["walk"],"left",image.loadsprite("sprites/personaje_walk_left.png",32,48)) status = "stay" -- al principio estará quieto, luego cuando se presione algo pasará a "walk" y caminará direction = "down" -- que mire hacia abajo, asi "nos ve" xD, los otros serian "up", "left" y "right" ax = 10 -- posicion en X en la que se mostrará inicialmente ay = 10 -- posicion en Y en la que se mostrará inicialmente anim = 0 -- cuadro de la animación actual, cuenta desde 0, e irá hasta 10 while true do pad = controls.read(); screen.clear(color.new(0,0,0,255)); drawBG(map,sX,sY); if pad:right() then sX = sX - 3; end if pad:left() then sX = sX + 3; end if pad:up() then sY = sY + 3; end if pad:down() then sY = sY - 3; end -- Cuidado al redimensionar. SI el mapa es más pequeño que la pantalla, se colgará. -- Por eso en el ejemplo trae el mapa grande. if controls.press("l") then resizewin(0,0,480,272,64,64); end if controls.press("r") then resizewin(0,0,480,272,16,16); end if controls.press("square") then resizewin(0,0,480,272,32,32); end screen.print(10,10,"Pokemon Green Soul"); screen.print(20,25,"Tech demo - Parte I"); screen.print(10,260,"L, R, Cuadrado: Cambiar tamaño del mapa."); if sX < 0 then sX = 0; end if sY < 0 then sY = 0; end if sX > ((maxX - dtw) * tilew) then sX = ((maxX - dtw) * tilew); end if sY > ((maxY - dth) * tileh) then sY = ((maxY - dth) * tileh); end if controls.up() or controls.down() or controls.left() or controls.right() then anim = anim + 0.1 status = "walk" if math.floor(anim)>3 then anim = 0 end else anim = 0 status = "stay" end if status=="walk" then link[status][direction]:setframe(anim) end ax = math.min(math.max(0,ax), 480-22) ay = math.min(math.max(0,ay), 272-27) link[status][direction]:blit(ax,ay) screen.waitvblankstart(); screen.flip(); end
el error que me sale es el siguiente : abc/abc.lua attempt to index global pad ( a nil value)
controls.read() Realiza la
controls.read()
Por lo tanto, no se a que viene los de:
pad = controls.read()
by jorge_97
Pero no entiendo es que vienes de LUA HM??
Porque usas pad=controls.read()
todas las lineas que pongan pad
estan mal.