Anuncios Google

usar transparencias???

Hola.
Mi tercer post y es para preguntar algo, jajaja, que mal ;-)

quiero tener una imagen de fondo, y poner como un cuadrado de tela trasparente para luego escribir encima de la tela.

he conseguido algo, pero es pixel por pixel y me resulta muy lento,
¿hay alguna funcion para hacer blit con una imagen sobre otra usando algun parametro de trasparencia como el alpha?

gracias
un saludo
Spirax


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.

os pondo el codigo que he

os pondo el codigo que he empleado ahora pero tiene que haber algo mas facil ¿no?
jajaja vereis que mi metodo de programación es patetico, pero bueno ahy estoy poco a poco y autodidacta, jajaja

para probarlo con lua necesitais una imagen en png llamada field.png (vale cualquiera) pero preferiblemente de 480x272

a ver si alguno se le ocurre algo mejor, jaja
jo, no sale bien el codigo, a ver si miro como adjuntarlo ;-)
se come algunas lineas y simbolos. y eso que lo he metido entre code y /code.
ja, ya se era por el simbolillo de "menor que" por que es como empiezan los tags de codigo, hay que cambiarlo por el simbolo :-)

Gracias
Spirax

<strong>
white = Color.new(255, 255, 255)
black = Color.new(10,10,10,0)
background = Image.load("field.png")
bax=0
while true do
--pinta el fondo y hace scroll con paso 2
screen:blit (bax,0,background,true)
screen:blit (bax+480,0,background,true)
bax=bax-2
if bax "menor que" -480 then
bax=0
end
--xx=donde empieza en cuadrado de trasparencia
xx=180
--y=alto del cuadrado trasparente
y=50
while y > 0 do
--x= ancho del cuadrado trasparente
x=100
while x > 0 do
--captura colores del pixel
color = screen:pixel(x+xx, y+100)
colors = color:colors()
--le resta 10 a todos los colores para hacer una telilla gris (distintos valores cambian el color de la tela 
screen:pixel(x+xx, y+100, Color.new(colors.r-10,colors.g -10,colors.b-10))
x=x-1
end
y=y-1
end
--imprime las letras dentro del cuadrado semitrasparente
screen:print (xx+30,110,"Titulo" ,black)
screen:print (xx+20,130, "del menu",black)
screen.flip()
--comprueba la pulsacion de la tecla start para salir del bucle
pad = Controls.read()
	if pad:start() then
		break
	end
end

Imagen de mordi

Estoy en ello

Primero de todo: Enhorabuena por acercarte al lua.
Segundo, lo que tu pretendes hacer (el modificar la tonalidad de ciertos pixeles) es algo con lo que yo estuve esperimentando, exactamente trate de hacer un puntero que modificara los colores del fondo por la zona que sobrevolaba, pero desistí ya que si el area a dibujar era extensa se ralentizaba notablemente, por lo que veo, tu codigo esta bastante claro y correcto, Lo basico es que al anidar bucles, el rendimiento baja notablemente, es una pena que esta sea la unica forma de recorrer los pixeles en filas y columnas. Voy a ver si de algun modo esto se puede mejorar. Yo lo he probado en el Luaplayer para windows y no en la psp, pero al mover bax=bax-1 en vez de bax=bax-2 el movimiento es mas fluido.

--flotaré, como patitos de goma en el agua estancada de la vida--


¡Un verdadero guerrero Klingon nunca utiliza comentarios en su código!

Imagen de mordi

modificacion

Lo unico que e modificado es los while por for, ahorrandonos escribir los incrementos y tal, creo que va mas o menos igual de velocidad, tu juzgaras:

white = Color.new(255, 255, 255)
black = Color.new(10,10,10,0)
background = Image.load("field.png")
bax=0
while true do
    screen:blit (bax,0,background)
    screen:blit (bax+480,0,background)
    bax=bax-2
    if bax < -480 then
       bax=0
    end
    xx=180
    for y=0,50 do
        x=100
        for x=0,100 do
           color = screen:pixel(x+xx, y+100)
           colors = color:colors()
           screen:pixel(x+xx, y+100, Color.new(colors.r-10,colors.g -10,colors.b-10))
        end
    end
    screen:print (xx+30,110,"Titulo" ,black)
    screen:print (xx+20,130, "del menu",black)
    screen.flip()
    pad = Controls.read()
    if pad:start() then
        break
    end
end

--flotaré, como patitos de goma en el agua estancada de la vida--


¡Un verdadero guerrero Klingon nunca utiliza comentarios en su código!

thanks. Si, yo tambien estoy

thanks.
Si, yo tambien estoy expreimentado con esto, jaja, es que veo es algunas funciones que hablan de la propiedad alpha, pero claro eso seria con imagenes de 32 bits en la que el cuarto bit es el canal alpha o trasparencia del bit de 0 a 255.
claro eso es teorico porque el hacer
screen:pixel(10,10,Color.new(0,0,255,125)

que deberia de ser medio transparente
hace lo mismo que:
screen:pixel(10,10,Color.new(0,0,255,0) --trasparente
screen:pixel(10,10,Color.new(0,0,255,255) --opaco

gracias de todos modos por las molestias en mirar y probar el codigo, jajaja
la idea creo que es buena, pero es que se ralentiza un huevo
Para un menú si sirve, pero para imagenes en movimiento se queda petao, jajaja

gracias
Spirax

Imagen de mordi

el canal alpha

Por lo que e visto, el alpha solo toma los valores absolutos, realmente solo sirve para visualizar o no los bits transparentes de un .gif o un .png pero no para crear sombras o superficies translucidas. Si quieres hablar sobre lua, agregame al messenger: mordicuac(arroba)gmail.com

 

--flotaré, como patitos de goma en el agua estancada de la vida--


¡Un verdadero guerrero Klingon nunca utiliza comentarios en su código!

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.