Anuncios Google

Problema en LUA!

Tengo un pequeño problema con un homebrew y es el siguiente: (primero les dejo el codigo para que lo vean).

---------------------------------------------------------------- Código ------------------------------------------------------------------ 

--Cargando imagenes.

fondo = Image.load("Imagenes/background.png")
block1 = Image.load("Imagenes/Blockup50.png")
block1sel = Image.load("Imagenes/Blockup50sel.png")
block2 = Image.load("Imagenes/Blockhz75.png")
block3 = Image.load("Imagenes/Blockhz75.png")
blocky = Image.load("Imagenes/Blockyhz.png")
puntero = Image.load("Imagenes/Puntero.png")

--Botones funcionen solo una ves

oldpad = Controls.read()

--Altura y anchura personajes y pantalla

anchoPantalla = 175 - blocky:width()
altoPantalla = 175 - block1:height()

anchoPantalla1 = 150 - puntero:width()
altoPantalla1 = 150 - puntero:height()


--Tabla

Block = { }
Block[1] = { x = 100, y = 75, Altura = block1:height(), Anchura = block1:width() }
Block[2] = { x = 0, y = 100, Altura = block2:height(), Anchura = block2:width() }
Block[3] = { x = 25, y = 50, Altura = blocky:height(), Anchura = blocky:width() }
Block[4] = { x = 50, y = 0, Altura = block3:height(), Anchura = block3:width() }

Puntero = { }
Puntero[1] = { x = 0, y = 0, Altura = puntero:height(), Anchura = puntero:width() }

Blocksel = { }
Blocksel[1] = { x = Block[1].x, y = Block[1].y, }

--Bucle principal

while true do
pad = Controls.read()
screen:clear()

--Variables que almacenan la posicion del personaje al comienzo de cada bucle

oldx = Block[3].x
oldy = Block[3].y

oldx1 = Block[1].x
oldy1 = Block[1].y

screen:clear()

--Mostrando imagenes

screen:blit(0,0,fondo)
screen:blit(Block[1].x,Block[1].y,block1)
screen:blit(Block[2].x,Block[2].y,block2)
screen:blit(Block[3].x,Block[3].y,blocky)
screen:blit(Block[4].x,Block[4].y,block3)
screen:blit(Puntero[1].x,Puntero[1].y,puntero)

--Controles

--Digital

if pad:up() and oldpad:up() ~= pad:up() and Puntero[1].y > 0 then
Puntero[1].y = Puntero[1].y - 25
end

if pad:down() and oldpad:down() ~= pad:down() and Puntero[1].y < altoPantalla then
Puntero[1].y = Puntero[1].y + 25
end

if pad:left() and oldpad:left() ~= pad:left() and Puntero[1].x > 0 then
Puntero[1].x = Puntero[1].x - 25
end

if pad:right() and oldpad:right() ~= pad:right() and Puntero[1].x < anchoPantalla then
Puntero[1].x = Puntero[1].x + 25
end

--Seleccion y movimiento de bloques

if Puntero[1] == Block[1] and pad:cross() and pad:up() and oldpad:up() ~= pad:up() then
Block[1].y = Block[1].y - 25
end

--Funcion que comprueba si hay colisiones

function comprobarColision(object)
if (Block[3].x + Block[3].Anchura > object.x) and (Block[3].x < object.x + object.Anchura) and (Block[3].y + Block[3].Altura > object.y) and (Block[3].y < object.y + object.Altura) then
Block[3].x = oldx
Block[3].y = oldy
end
end

function comprobarColision1(object)
if (Block[1].x + Block[1].Anchura > object.x) and (Block[1].x < object.x + object.Anchura) and (Block[1].y + Block[1].Altura > object.y) and (Block[1].y < object.y + object.Altura) then
Block[1].x = oldx1
Block[1].y = oldy1
end
end

--Comprobamos si hay colision

comprobarColision(Block[1])
comprobarColision(Block[2])
comprobarColision(Block[4])

comprobarColision1(Block[2])
comprobarColision1(Block[4])
comprobarColision1(Block[3])

screen.waitVblankStart()
screen.flip()
oldpad = pad
end

--------------------------------------------------------------- Código ------------------------------------------------------------------- 

Ven la parte en negritas? Pues ahi tengo el problema ya que dice: "Si puntero es igual a bloque 1 y pad equis es pulsado y pad arriba es pulsado entonces bloque1 es igual a bloque1 menos 25"

 El problema es que no me funciona así ya que si puntero es igual a bloque y presiono X y arriba, no pasa nada. En cambio si pongo

if Puntero[1] ~= Block[1] and pad:cross() and pad:up() and oldpad:up() ~= pad:up() then
Block[1].y = Block[1].y - 25
end

*Cambiando el "==" por "~=" si me funciona (y eso es lógico porque siempre el puntero es diferente del bloque).

Bien sin mas vueltas mi pregunta es:

  1. ¿Por qué no me funciona cuando pongo == (igual) si la posicion del puntero y el bloque es la misma?

 Bien, espero respuestas y Gracias de antemano. el__QAT


Tutorial: Fabricando nuestro propio micrófono para la PSP.

Exclusivo de PSP.Scenebeta.com


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

Veras, tienes que usar una

Veras, tienes que usar una especie de colison:

if pad:cross() and puntero.x + puntero.ancho > bloque[1].x and puntero.x < bloque[1].x + bloque[1].ancho and puntero.y + puntero.alto > bloque[1].y and puntero.y < bloque[1].y + bloque[1].alto then

Cosa que quieres que ocurra.

end

Saludos


¡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 el__QAT

Gracias P22!

Muchas Gracias me ha ido de maravilla.

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.