Anuncios Google

[ENCONTRÉ LA SOLUCIÓN] De nuevo duda con paredes (código erróneo) AYUDA CON LUA

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


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 P22

3 cosas

  1. Postea en el foro correcto
  2. Prueba a encerrar las sumas entre paréntesis
  3. Prueba a meter la segunda comparación en otro if:

if Jugador[1].y <= (Barra[1].y + Alto[1].bar and Jugador[1].x + Ancho[1].jug) then
   if (Barra[1].y + Alto[1].bar and Jugador[1].x + Ancho[1].jug) <= (Barra[1].x + Ancho[1].barra)


¡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

Imagen de IRM93

Hice lo que me dijiste pero

Hice lo que me dijiste pero me tira error de nuevo, linea 49.

--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) then
            if (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		 
      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


Scenebitos ???????..........

Imagen de IRM93

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

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.