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:
Bien, espero respuestas y Gracias de antemano. el__QAT
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
Gracias P22!
Muchas Gracias me ha ido de maravilla.