Anuncios Google

Me podeis decir que error cometo? (Luadev)

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)




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.
Imagen de User170294

controls.read() Realiza la

controls.read()

  • Realiza la lectura de los controles.
  • Devuelbe nil.

Por lo tanto, no se a que viene los de: pad = controls.read()


Imagen de jorge_97

by jorge_97

Pero no entiendo es que vienes de LUA HM??

Porque usas pad=controls.read()

 

Imagen de Dioni0396

todas las lineas que pongan pad

estan mal.

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.