EDITO: Encontré la solución al problema, no se encontraba en el planteamiento utilizado, sino en la sintaxis, y la forma de expresar los if. Supongo que con tanto dato y tanto if, la máquina se haría un lío. Por lo que probé a escribirlo desde 0. De forma más sencilla, repasando aquello que pudiera dar error, y basándome en mis propios errores lo conseguí, he tardado 3 días solo para que un simple cuadrado, sea incapaz de atravesar una linea de 3px. Pero bueno, es mi mayor logro con LUA =) y gota a gota se hizo el mar, ¿no?.
Bueno abajo les dejo el código corregido, y más abajo el post con el código erróneo anterior para que comparen. Si el que lee esto ahora mismo tiene el mismo problema que yo, no copies y pegues, busca, analiza, comete errores, y sobre todo, aprende de tí mismo. Ya que así aprenderás LUA.
EL CONOCIMIENTO HUMANO ES DEL MUNDO.
--probando una pared sencilla --colores rojo = Color.new(255,0,0) verde = Color.new(0,255,0) azul = Color.new(0,0,155) blanco = Color.new(0,0,0) negro = Color.new(255,255,255) --Imagenes dibujoJugador = Image.createEmpty(20,20) dibujoJugador:clear(blanco) dibujoFondo = Image.createEmpty(480,272) dibujoFondo:clear(verde) dibujoBarra = Image.createEmpty(400,3) dibujoBarra:clear(negro) --informacion del jugador y de la barra Jugador = { } Jugador[1] = { oldx = 3, x = 3, oldy = 3, y = 3 } Barra = { } Barra[1] = { x = 2, y = 25 } Alto = { } Alto[1] = { jug = 20, bar = 3 } Ancho = { } Ancho[1] = { jug = 20, bar = 400 } --función que muestra las imagenes function mostrarImagenes() screen:blit(0,0,dibujoFondo) screen:blit(Jugador[1].x,Jugador[1].y,dibujoJugador) screen:blit(Barra[1].x,Barra[1].y,dibujoBarra) end function movimiento() pad = Controls.read() if pad:left() then Jugador[1].x = Jugador[1].x - 1 elseif pad:right() then Jugador[1].x = Jugador[1].x + 1 end if pad ~= oldPad then if pad:up() then Jugador[1].y = Jugador[1].y - 30 elseif pad:down() then Jugador[1].y = Jugador[1].y + 30 end oldPad = pad end end function impedirElPaso() if Jugador[1].x >= 478 then Jugador[1].x = Jugador[1].oldx elseif Jugador[1].x <= 0 then Jugador[1].x = Jugador[1].oldx end if Jugador[1].y >= 271 then Jugador[1].y = Jugador[1].oldy elseif Jugador[1].y <= 0 then Jugador[1].y = Jugador[1].oldy end if Jugador[1].y + Alto[1].jug >= Barra[1].y then if Jugador[1].x + Ancho[1].jug <= Barra[1].x + Ancho[1].bar then Jugador[1].y = Jugador[1].oldy end end if Jugador[1].y <= Barra[1].y + Alto[1].bar then if Jugador[1].x <= Barra[1].x + Ancho[1].bar then Jugador[1].y = Jugador[1].oldy end end Jugador[1].oldx = Jugador[1].x Jugador[1].oldy = Jugador[1].y end while true do mostrarImagenes() movimiento() impedirElPaso() screen.flip() screen.waitVblankStart() end
POST ANTIGUO:
Bueno les cuento, he realizado el código que pongo más abajo, y en principio funciona, pero cuando presiono la flecha para abajo, me tira un error en la linea 48, de aritmética, o algo así. Pueden decirme qué error cometí?, por favor.
EL CÓDIGO:
La línea 48 es la que dice: (Debajo de pad:down() )
if Jugador[1].y <= Barra[1].y + Alto[1].bar and Jugador[1].x + Ancho[1].jug <= Barra[1].x + Ancho[1].barra then
--probando una pared sencilla --colores rojo = Color.new(255,0,0) verde = Color.new(0,255,0) azul = Color.new(0,0,155) blanco = Color.new(0,0,0) negro = Color.new(255,255,255) --Imagenes dibujoJugador = Image.createEmpty(20,20) dibujoJugador:clear(blanco) dibujoFondo = Image.createEmpty(480,272) dibujoFondo:clear(azul) dibujoBarra = Image.createEmpty(400,3) dibujoBarra:clear(negro) --informacion del jugador y de la barra Jugador = { } Jugador[1] = { oldx = 3, x = 3, oldy = 3, y = 3 } Barra = { } Barra[1] = { x = 2, y = 25 } Alto = { } Alto[1] = { jug = 20, bar = 3 } Ancho = { } Ancho[1] = { jug = 20, bar = 400 } --función que muestra las imagenes function mostrarImagenes() screen:blit(0,0,dibujoFondo) screen:blit(Jugador[1].x,Jugador[1].y,dibujoJugador) screen:blit(Barra[1].x,Barra[1].y,dibujoBarra) end function movimiento() -- funcion que mueve la imagen del jugador y evita que este atraviese las paredes. pad = Controls.read() if pad:left() then Jugador[1].x = Jugador[1].x - 1 end if pad:right() then Jugador[1].x = Jugador[1].x + 1 end if pad ~= oldPad then if pad:up() then Jugador[1].y = Jugador[1].y - 10 if Jugador[1].y + Alto[1].jug >= Barra[1].y and Jugador[1].x + Ancho[1].jug <= Barra[1].x + Ancho[1].barra then Jugador[1].y = Jugador[1].oldy end end if pad:down() then Jugador[1].y = Jugador[1].y + 10 if Jugador[1].y <= Barra[1].y + Alto[1].bar and Jugador[1].x + Ancho[1].jug <= Barra[1].x + Ancho[1].barra then Jugador[1].y = Jugador[1].oldy end end oldPad = pad end Jugador[1].oldx = Jugador[1].x Jugador[1].oldy = Jugador[1].y end while true do mostrarImagenes() movimiento() screen.flip() screen.waitVblankStart() end
Hilo movido: A Programación LUA. Favor de postear en el lugar correcto. Gracias |Robione22
Scenebitos ???????..........
3 cosas
¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.
Mi review: iPod Touch 4G
Hice lo que me dijiste pero
Hice lo que me dijiste pero me tira error de nuevo, linea 49.
Scenebitos ???????..........
ok, sorry por postear mal, lo
ok, sorry por postear mal, lo de los parentesis ya lo prove y nada, provare con lo 3º a ver. gracias