Anuncios Google

6. Imagenes

Tutoriales Avanzados Homebrewes

Todos nuestros programas han sido sólo aplicaciones de texto, pero en este tutorial nos introduciremos en el uso de imágenes y algunos comandos que podemos usar para obtener información sobre ellas. Haremos un programa que empezara a parecer un juego. No hará nada emocionante pero nos servirá para el propósito de este tutorial: las imágenes. Hay muchos más comandos de imágenes disponibles que los que vamos a aprender aquí. Aprenderemos la mayoría de ellos en posteriores tutoriales. Si quieres puedes mirarlos en la documentación del LuaPlayer. Nuestro producto final incluirá un personaje que podrá moverse por la pantalla, pero que no podrá traspasar sus límites.Usando imágenes en Lua.

Lo primero que deberías hacer es guardar las imágenes que vamos a usar en la carpeta en la que estamos trabajando. LuaPlayer puede cargar imágenes PNG y JPEG. La mayor parte de las veces yo uso PNG, sobre todo cuando necesitas usar transparencia. Ahora guarda estas imágenes.

Descomprime esas imágenes en la carpeta en la que estás trabajando. Deberías tener tres imágenes:

player.png
grass.png
flower.png

Cargando imágenes:

Para usar una imagen en Lua primero tienes que cargarla en tu programa, en una variable (o tabla). Puedes hacerlo al comienzo de tu programa o después, dependiendo de cuando se necesite la imagen. Pre-cargaremos nuestras imágenes cerca del comiendo de nuestro código, un poco más abajo del principio. Ej:

hierba = Image.load("grass.png")

Esto cargará la imagen grass.png en la variable hierba. Para cargar la imagen tendrías que tenerla en la carpeta de nuestro proyecto principal, el que contiene nuestro fichero script. Si tuvieras la imagen en una subcarpeta, por ejemplo, Imágenes, entonces usarías Imagenes/grass.png en vez de grass.png. Asegúrate de escribes el texto exactamente igual, con la I mayúsculas en Image y la l (ele) en minúsculas en load.

Mostrando imágenes:

Mostrar una imagen en pantalla no es tan difícil como cargarla. Este es el comando completo:

screen:blit(x, y, Origen_imagen, [origen_x, origen_y, ancho, alto], [alpha = verdadero])

Hay mucha información que rellenar aquí. No siempre necesitarás todos esos argumentos y puedes omitir los que están entre corchetes si no los necesitas. Expliquémoslos. El código empieza con screen:blit, que es el comando que dice que se muestre la imagen por pantalla. x e y son las mismas que en el comando print, son las coordenadas donde la imagen será mostrada (la coordenada 0,0 es la esquina superior izquierda de la pantalla de la PsP y la coordenada 480,272 es la esquina inferior derecha). Origen_imagen es la imagen que será mostrada. Por ejemplo, arriba hemos cargado una imagen llamada hierba, así que podemos usar hierba como origen. [origen_x, origen_y, ancho, alto] son opcionales. Son usadas para cargar una sección de una imagen. origen_x y origen_y son las coordenadas de la imagen donde la sección comienza. No son coordenadas de la imagen completa, sino de la sección. ancho y alto son la anchura y altura del trozo de imagen que vamos a usar de la imagen principal. La última parte del comando es el argumento alpha. Este es usado para hacer transparencia en imágenes. Verdadero hará la imagen transparente (lo que significa que el fondo se verá a través sin color) y falso mostrará la imagen tal como es. No usaremos todos los argumentos en este tutorial.

Obteniendo el tamaño de la imagen:

Obtener el tamaño de la imagen que has cargado puede ser muy útil. Hay dos comandos para hacerlo, uno para la anchura y otro para la altura de la imagen. Son:

imagen:width()
imagen:height()

Para usarlos reemplaza la palabra imagen por la de la imagen de la que quieres obtener su anchura y altura. Ej:

hierba:width()
hierba:height()

Continuemos y empecemos nuestro programa. Lo primero que haremos será cargar nuestras imágenes en nuestro programa. Crea un nuevo archivo y escribe este código:

hierba = Image.load("grass.png")
jugador = Image.load("player.png")
flor = Image.load("flower.png")

Con esto hemos cargado nuestras tres imágenes en nuestro programa. Ahora vamos a usar los comandos del tamaño de la imagen. Pon el siguiente código y luego lo explicaré. Es mucho mejor que escribas el código en vez de copiarlo. Memorizarás los comandos mejor.

anchoPantalla = 480 - jugador:width()
altoPantalla = 272 - jugador:width()

Este fragmento de código nos ayudará a parar al jugador cuando alcance los límites de la pantalla. Sabemos que 480 es el ancho de la pantalla de la PsP. Pero si ponemos el límite de la pantalla a 480. nuestro personaje saldrá de la pantalla por 32 píxeles, puesto que nuestro personaje tiene 32 píxeles de ancho. jugador:width() es la anchura de la imagen jugador, la cual es 32 píxeles. Esa cantidad es restada del ancho y del alto de la pantalla para parar la imagen en los límites de la pantalla.

Ahora vamos a crear una tabla para almacenar la información del jugador. La única información que vamos a necesitar para este ejemplo será la posición x e y en la pantalla. Mete este código:

Jugador = { }
Jugador[1] = { x = 200, y = 50 }

Esto almacenará la posición en pantalla de nuestro jugador. Empezaremos con nuestro jugador en la posición x = 200 e y = 50. Ahora empezaremos nuestro bucle principal. Mete este código:

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

Ahora en la siguiente sección de código introduciremos un nuevo comando de bucle, el bucle for. Te daré un ejemplo para que veas como funciona. NO lo uses en tu código. Este ejemplo imprimirá las armas de cinco jugadores por pantalla usando sólo un pequeño bucle.

for a = 1,5 do
screen:print(10, 10, Jugador[a].arma, verde)
end

Para usar el bucle for darás a una variable un valor inicial y un valor final. En este caso for a = 1,5 do. Hemos creado un bucle que da a la variable a un valor inicial de 1 y un valor final de 5. Dentro del bucle estamos imprimiendo el arma del jugador por pantalla. La última línea es la sentencia end, la cual se usa para terminar un bucle. Este bucle se repetirá hasta que el valor final de a se haya alcanzado y el bucle terminará entonces. La primera vez el bucle se ejecutará con el valor de a igual a 1. La siguiente vez a valdrá 2, luego 3, después 4 y al final 5. Esto rápidamente imprimirá las armas del jugador 1 al 5 en pantalla. Aunque, para hacerlo realmente necesitarías cambiar las coordenadas de pantalla del comando print porque sino se imprimirían unas encimas de otras. Pero esto muestra el uso del comando for. Puedes usar sentencias if dentro de los bucles for si fuera necesario.

Usaremos este método para mostrar la imagen hierba por toda la pantalla. Pon el siguiente código y después lo explicaré.

for a = 0, 14 do
for b = 0,8 do
screen:blit(32 * a, 32 * b, hierba)
end
end

Es un bucle for dentro de otro bucle for. Esto mostrará la imagen hierba en toda la pantalla. Mostrará 15 imágenes horizontalmente y 9 verticalmente. Fíjate que empezamos por cero en vez de uno, así que las imágenes serán mostradas junto al límite izquierdo de la pantalla.

Pongamos unas pocas imágenes más:

screen:blit(100,100,flor)
screen:blit(300,220,flor)
screen:blit(Jugador[1].x,Jugador[1].y,jugador)

Esto simplemente mostrará dos flores en pantalla y nuestro jugador. Cuando usemos nuestras teclas de movimiento rápidamente cambiarán las coordenadas del jugador en cada bucle si estamos presionando el botón. Al usar el comando blit la imagen de nuestro jugador será automáticamente mostrada en la zona correcta de la pantalla.

Ahora añadamos código para detectar si estamos presionando las teclas de dirección. Mete esto:

if pad:left() and Jugador[1].x > 0 then
Jugador[1].x = Jugador[1].x - 2
end
 
if pad:right() and Jugador[1].x < anchoPantalla then
Jugador[1].x = Jugador[1].x + 2
end
 
if pad:up() and Jugador[1].y > 0 then
Jugador[1].y = Jugador[1].y - 2
end
 
if pad:down() and Jugador[1].y < altoPantalla then
Jugador[1].y = Jugador[1].y + 2
end

Este código comprobará si estamos presionando los botones arriba, abajo, izquierda o derecha. Usando la sentencia and también comprobamos que no se salga de los límites de la pantalla. Como la coordenada superior y la coordenada más a la izquierda son cero, podemos ver con facilidad si nuestra posición es mayor que cero. Para los otros límites usamos anchoPantalla para la derecha y altoPantalla para el límite inferior. Hemos definido esas variables antes. Si nuestra posición pasa la comprobación del if entonces la coordenada x o la y de nuestro jugador será aumentada o disminuida en 2. Cada vez que el bucle se ejecute mostrará la imagen del jugador en la nueva posición.

Finalmente, acabemos nuestro bucle. Usa este código:

screen.waitVblankStart()
screen.flip()
end

Guarda el trabajo y lánzalo. Usa las teclas de dirección para mover la imagen por la pantalla. No te será permitido traspasar los límites de la pantalla.

4.59524
Tu voto: Ninguno Votos totales: 4.6 (42 votos)

Anuncios Google

Comentarios

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.

Cargar imágenes mas grandes de 480x272

Como puedo cargar una imgaen superior a 480x272?

Lo que quiero es cargar un stage de fondo qe mide 960x272, y hacerle que se mueva la stage de derecha a izquierda.

lo he cargado así:

fondo = Image.load("./Imagenes/Fondos/Fondolargo.png")

Pero siempre me devuelve
 Error loading image.

ayuda por favor!

Imagen de gdljjrod

El límite si bien recuerdo

es 512*512px. O bien la reduces o la imagen la divides en varias partes y las cargas y las vas bliteando una tras otra.

Imagen de carlos_chivista

BUENISIMO POST SIGUE ASI ;)

BUENISIMO POST SIGUE ASI ;)

Problema al Cargar las Imagenes

Estaba probando este exelente Tutorial para aprender LUA y no me cargaban las imagenes y lo solucione asi:

Yo tenia una carpeta en el escritorio donde tenia el luaplayer.exe y el scrpit pero no me cargaban las imagenes entonces probe con esto:

hierba = Image.load("/Documents and Settings/webmaster/Escritorio/PSP/grass.png")

lo que vemos hay arriba es la ruta de las imagenes sin el nombre de la unidad, en mi caso yo estaba trabajando desde el escritorio y el luaplayer.exe me daba error y se cerraba la ventana, pero ya esta solucionado, saludos a todos y espero que les sirva de ayuda por si se les a presentado el mismo error que a mi.

Corregidme este codigo plisss!!

--Testeador de botones de PSP
--Autor: Davidove

--Almacenar color
rojo = Color.new(255,0,0)

--Almacenar imagenes
PSP = Image.load("PSP.png")
Arriba = Image.load("Arriba.png")
Abajo = Image.load("Abajo.png")
Izquierda = Image.load("Izquierda.png")
Derecha = Image.load("Derecha.png")
R = Image.load("R.png")
L = Image.load("L.png")
Triangulo = Image.load("Triangulo")
Circulo = Image.load("Circulo")
Cuadrado = Image.load("Cuadrado")
X = Image.load("X")

--¡¡Comenzamos!!
while true do
pad = Controls.read()
screen:clear()

screen:blit(242,135,PSP)

if pad:up() then
screen:blit(242,135,Arriba)
end
if pad:down() then
screen:blit(242,135,Abajo)
end
if pad:left() then
screen:blit(242,135,Izquierda)
end
if pad:right() then
screen:blit(242,135,Derecha)
end
if pad:l() then
screen:blit(242,135,L)
end
if pad:r() then
screen:blit(242,135,R)
end
if pad:triangle() then
screen:blit(242,135,Triangulo)
end
if pad:circle() then
screen:blit(242,135,Circulo)
end
if pad:cross() then
screen:blit(242,135,X)
end
if pad:square() then
screen:blit(242,135,Cuadrado)
end
wait.VblankStart()
screen.flip()
end

 

EDITO: Solucionado por mi solo.


 

 

No se

Como coloco una imagen de fondo? me pasa lo mismo que lo que le apso al de abajo, pero no posteo solucion y nose como xdd, es tamaño de fondo de psp, 480x272, gracias.

Imagen de --Gomasz--

primero

ya que tienes la imagen que quieres de fondo pones

fondo = Image.load("ruta de la imagen entre comillas")

while true do

screen:clear()

screen:blit(x,y,fondo) ------------aqui es para imprimir la imagen, x,y son las cordenadas de la pantalla del psp

screen.flip()
screen.waitVblankStart()
end                                                                                                                                                     



\\m// ₪₪₪₪₪₪--  ☠ ☠ ☠ ☠ ☠ ☠ --₪₪₪₪₪₪ \\m//

Imagen de Duende68

Novato...

Hola quisiera poner una imagen de fondo y no tengo ni idea de como hacerlo. La imagen mide 480 x 272 pixeles. Grcias por escuchar.

 

EDITO:Solucionado

 


              Mod VS Spammer"Si Se Puede Soñar, Se Puede Lograr"

               ¿Quieres Un IPad 2 Gratis? Pasate por aqui.

Imagen de Guitripio

tengo un problema...

este es el codigo.:

hierba = Image.load("grass.png")
jugador = Image.load("player.png")
flor = Image.load("flower")
anchoPantalla = 480 - jugador:width()
altoPantalla = 272 - jugador:width()
Jugador = {}
Jugador[1] = {x = 200,y = 50 }
while true do 
pad = Controls.read()
screen:clear()
for a = 0,14 do
for b = 0,8 do
screen:blit(32 * a, 32 * b,hierba)
end
end
screen:blit(100,100,flor)
screen:blit(300,220,flor)
screen:blit(Jugador[1].x,Jugador.y,jugador)
 
if pad:left() and Jugador[1].x>0 then jugador[1].x = Jugador[1]-2
end
 
if pad:right() and Jugador[1].x < anchoPantalla then jugador[1].x = Jugador[1] . x+2
end
if pad:up() and Jugador[1].y >0 then Jugador[1].y = Jugador[1].y -2
end
if pad:down() and Jugador[1].y < altoPantalla then Jugador[1].y = Jugador[1].y +2
end
screen.waitVblankStart()
screen.flip()

me dice que hay un error en while true do y ya le movi y nada y cuando le doy end al bucle ,me dice que no puede cargar la imagen,porque,no lo se...!!!!!!!

ya lo revise,5 veces y no encuentro el error,si alguien pudiera ayudar,se lo agradeceria mucho....!!!!


===========

2 Pasos a la libertad.

sudo apt-get remove Windows
sudo apt-get install Gnu/Linux

==================================================

Linux se crea y no se destruye, solo se transforma.

Imagen de sting18

tienes que cerrar el while

tienes que cerrar el while true do al final del codigo con end y asegurate de tener las imagenes en su lugar

Imagen de Guitripio

listo...

ya resolvi ese problema y el de las imagenes,pero ahora me da otro

ya que cuando le doy a la izquierda o derecha ,se me cierra la ventana del jueguito ese,

y me sale este error.

error:script.lua 23 : loop in gettable

arriba y abajo,no hay ningun problema,el problema solo es para left y right

Solucionado...

el error era al poner jugador y el correcto era Jugador

ahora si,voy con el proximo tuto....


===========

2 Pasos a la libertad.

sudo apt-get remove Windows
sudo apt-get install Gnu/Linux

==================================================

Linux se crea y no se destruye, solo se transforma.

Imagen de DarK-TewiE

ya

me e vuelto a leer los tutoriales y ahora si me entero jeje a por el 7

Imagen de NightKnight

gracias voy por el 7, ( te

gracias voy por el 7, ( te mande un scenebincito jeje XD )

cual es el codigo que al

cual es el codigo que al pulsar X imprima una pantalla y al volver a pulsar la quite?

eso

if pad:cross() and oldpad~= pad and seleccion== 7 then
screen:blit(100,100, Xrojo)

end

mas el codigo que no se

 

gracias

Imagen de elbuscapreguntaspsp

como?

Yo tenia una imagen guardada en mi psp pero la borraron y ahora no la encuentro por interned y la tengo de fodo de pantalla en la psp... Como puedo cojer la imagen de el fondo de pantalla psp y guardarla en la carpeta psp o pc???

Prfavor contestarme, no se que más buscar!!

Imagen de The_RockmanSG

Entra

Al menu recovery o vsh y conectate a la flash1,ve a Vsh/theme y copia el archivo llamado Wallpaper.bmp

Imagen de elbuscapreguntaspsp

Gracias!

Gracias ya e consiguido la imagen. No me imaginaba que podia estar alli. Donde se buscan y encuentran estas cosas ?! Y no se que es un scenebito si me lo informas lo mismo puedo pasartelo...

Imagen de The_RockmanSG

Scenebito:

Scenebito:punto que se le da a un user,moderador,coder ECT.de la web http://www.psp.scenebeta.com/ (y respectivos) que indica su actividad en el foro,se pueden usar para regalar,rifar y agradecer,este se pierde si el usuario no se conecta a esta web 1 dia...

Significado sacado del diccionario:Diccionario de la lengua scenebetera by Rockman1998

Saludos


Pues que mal que no lo vez a un lado me puedes tener

y sigo aqui pensando en ti en todo lo que te di...

 

Xperia Arc S G.B 2.3.4

hola

bueno quisiera saber como borrar una imagen
ejemplo:
ejemplo = Image.load("ejemplo")
screen:blit(100,100,ejemplo)
la imagen podria ser de 32 x 32 pixeles luego de que haya mostrado la imagen la quiero borrar pero como nose alguien podria ayudarme

Imagen de arielnmz

holaa

creo que hay un error en esta parte del codigo...

 

for a = 0, 14 do

for b = 0, 8 do

screen:blit(32 * a, 32 * b, hierba)

end

end

 

me dice: " error: imagenes.lua:16: function arguments expected near 'for' "

 

porque?

Imagen de el__QAT

Novato...

Hola mi pregunta es:

Estoy programando un pequeño juego de estrategia en el que  tienes que sacar un block de un cuadro bueno no digo mas.. ¿Cómo hago que una imagen avance solo cuando presiono una tecla y no mientras la tenga pulsada? Ejemplo:

 Presiono la tecla "derecha" y el block de mueve hacia la derecha pero... si mantengo pulsada la misma tecla el block sigue avanzando. (y yo no quiero eso quiero que se detenga).

 Espero que me puedan ayudar.     Mi codigo:

--Carga de imagenes.

fondo = Image.load("background.png")
block = Image.load("Blockhz75.png")
blockup50 = Image.load("Blockup50.png")

oldpad = Controls.read()

anchoPantalla = 150 - block:width()
altoPantalla = 150 - block:height()

--Crear tablas.

Block = { }
Block[1] = { x = 0, y = 0 }
Block[2] = { x = 75, y = 75 }

--Mostrar las cosas en pantalla.

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

 screen:blit(0,0,fondo)
 
 screen:blit(Block[1].x,Block[1].y,block)

 if pad:left() and Block[1].x > 0 then
  Block[1].x = Block[1].x - 2
 end
 if pad:right() and Block[1].x < 75 then
  Block[1].x = Block[1].x + 2
 end
 
 screen:blit(Block[2].x,Block[2].y,blockup50)
 
 if pad:up() and Block[2].y > 0 then
     Block[2].y = Block[2].y - 2 
 end
 
 if pad:down() and Block[2].y < 100 then
     Block[2].y = Block[2].y + 2
 end 
 
 screen.waitVblankStart()
 screen.flip()
end 


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

Exclusivo de PSP.Scenebeta.com

Deformar una Imagen

 

Hola, la idea es pescar una imagen externa y cargarla (ej.:mifoto.png, es un cuadrado de mi imagen) y simular que gira 3D en si misma al mover el Pad, para eso tendría que deformar las cuatro esquinas independientemente para poder simular el giro, me explico, ej.: 1.-aumentar al alto del lado derecho de la imagen, para eso subir y bajar respectivamente las esquina superior e inferior del lado derecho. 2.- disminuir el lado izquierdo de la imagen bajando la esquina superior izquierda y subiendo la esquina inferior izquierda. 3.- y al mismo tiempo de lo indicado anteriormente, mover la esquina superior e inferior del lado izquierdo hacia el lado derecho y las del lado derecho al izquierdo.

Todo en teoría simularía un giro 3D de la imagen en si misma.

Uf.... hay un comando, función o librería que lo haga automáticamente?...sino, como manejo a gusto las cuatro esquinas de la imagen.......

 

 

Gracias. 

Imagen de Mιgυε

No me sale

Ola, e copiado todo bien y e puesto las imagenes en la misma carpeta que el archivo script.lua pero ahora nose que hacer. Tengo que compilar o algo. Es que asi no consaigo abrirlo de ninguna manera con el LuaPlayer for windows. Que tengo que hacer?


 Gяαcιαs α -RG4M3R- ρσя εl αvαтαя

Imagen de rubenelportero

2 formas con psp

descargate luaplayer de esta web y te lo metes como cualquier homebrew, luego metes el scrip.lua y con el brower de luaplayer lo ejecutas

 

o bien tu scrip lo renombras a System.lua con la mayuscula y creas una carpeta llamada "System" el "System.lua" lo metes en la carpeta luego creas otra carpeta con el nombre k tu kieras ejemplo "Polygunwars" dentro de esa metes la carpeta "System" y dentro de ella metes las imagenes que vayas a usar, si las imagenes estan denttro de una carpeta mete la carpeta con todas las imagenes, ahopra coge el "eboot" de cualquier homebrew de lua osea puedes coger el eboot de corazas cañones o the quiz music de cualquiera el eboot lo metes tanmbien en la carpeta (la carpeta que creaste con el npombre que tu quisiste) cuando lo tengas todo preparado mete esa carpeta dentro de "psp\game\" y ves al menu de juegos,  y encontraras tu juego !ojo! si pusiste el eboot de corazas cañones tu juego sera donde ponga corazas cañones etc 

Imagen de yamishi

yo puedo ayudar

estoy aprendiendo pero puedo ayudar con las imagenes para este tutorial y si los otro no tienen imagenes tambien puedo ayudar con las imagenes
diganme como puedo mandar leslas imagenes porfavor


 

Imagen de Arkanist

hay una cosa

hay una cosa que intento pero no me sale

screen:blit(x, y, Origen_imagen, [origen_x, origen_y, ancho, alto], [alpha = verdadero])

alpha es para k sea transparente la imagen, pero como lo hago? pongo todo lo de screen:blit y luego ,alpha = verdadero)?? es que no me sale.

en vez de verdadero pon true

en vez de verdadero pon true

Imagen de Guillermo_Cornielle

Pues

Como ya te habia dicho antes, si he oido hablar de esto en LUA, peor nunca lo he visto puesto en practicas, de la forma que quieres, peor en C si.

 


Manual del Perfecto Votante Para un voto libre y justo!.

TheGCProjects

Imagen de Arkanist

Entonces?

entonces, para una imagen que tengo, no hay forma de quitarle el color de fondo??

pos vaya...

Imagen de ZYX3D

Claro que hay manera...

Lo que significa eso de [alpha=verdadero] es que por defecto se activa la transparencia, o sea que no tienes que hacer nada especial. Simplemente, asegúrate que la imagen está en png o gif transparente.


Strength is irrelevant. Resistance is future. We wish to improve ourselves.

La fuerza es irrelevante. La resistencia es futuro. Queremos mejorarnos.

Imagen de Arkanist

pero como lo pongo lo de

pero como lo pongo lo de alpha?? asi:

screen:blit(ejemplo[1].x,ejemplo[1].y,ejemplo[1].Imagen,alpha=verdadero)???

es que no lo se muy bien esto.

gracias.

Imagen de ZYX3D

Valor por defecto...

...significa que no tienes que poner nada para que funcione.

O sea, en el ejemplo que pones,

screen:blit(ejemplo[1].x,ejemplo[1].y,ejemplo[1].Imagen)

De todas maneras, recuerda que Lua no es "español", así que para otra vez que necesites un valor booleano verdadero, usa la constante true, o bien una expresión que evalúe en verdadero (cualquier cosa que no sea false o nil). Fíjate además que si no estás poniendo "Imagen=ejemplo[1].Imagen", no resulta coherente con esta sintaxis poner algo tipo "alpha=verdadero". Eso te lo ponen para que veas que es un parámetro opcional, y cuál es su valor por defecto; y es que las referencias también se escriben con códigos y supuestos propios.


Strength is irrelevant. Resistance is future. We wish to improve ourselves.

La fuerza es irrelevante. La resistencia es futuro. Queremos mejorarnos.

Imagen de Arkanist

Y cual es la forma mas

Y cual es la forma mas sencilla o rápida de hacer que el fondo de una imagen sea transparente?

Es que yo de esto de imagenes no entiendo mucho. Tengo el juego medio hecho ya pero se ve por ejemplo el personaje con el fondo blanco xD.

Y otra pregunta, se pueden poner dos temporizadores en el mismo juego? Cada uno con una variable diferente ej: contador1 = Timer.new(), contador2 = Timer.new() ??

 Gracias.

Imagen de ZYX3D

Editarla

De entrada, decir que ojo, no sea que te estés confundiendo con lo que es editar la imagen fuera de Lua, por una parte, y cómo mostrarla con Lua, por otra... lo del blit sólo te sirve para mostrarla en pantalla, pero no la modifica.

La manera más simple es con un editor de imágenes ("tipo Photoshop"), y te recomiendo el GIMP, que está en la sección WWW. Coges la herramienta Varita Mágica, seleccionas el fondo y lo borras, luego lo grabas como GIF con transparencia o PNG con transparencia/alpha. Y eso lo importas a Lua.

Entendámonos: si la imagen no tiene ese canal de transparencia, no la podrás hacer transparente en Lua sin una edición en código razonablemente complicada que sustituya el color de ciertos píxeles por el color transparente. Si la imagen tiene ese canal de transparencia, puedes mostrarla como con transparencia, o sin; para eso sirve el parámetro alpha, si no estoy equivocado. (En otros programas y lenguajes, el parámetro alpha no marca si se respeta o no la transparencia de la imagen, sino la opacidad del color; pero entonces no sería un booleano, sino un número, normalmente de tamaño byte o menor, para valores de 0-100 o 0-255; en ActionScript, por ejemplo, es de 0-100). 

En cuanto a la otra pregunta... bueno, como ya he dicho no domino mucho el Lua. Y se me ocurre una respuesta que suena lógica y tal y cual, pero tratándose de algo que no he empleado nunca, y sabiendo que los timers siempre tienen sus triquiñuelas, prefiero dejar que la responda otro que sí sepa de qué está hablando :)


Strength is irrelevant. Resistance is future. We wish to improve ourselves.

La fuerza es irrelevante. La resistencia es futuro. Queremos mejorarnos.

Imagen de Arkanist

tengo una pregunta.

sería posible añadir una animacion (.swf .avi o .gif) en una secuencia de un juego??

Imagen de Guillermo_Cornielle

Nop

Hasta lo que yo se, solo usando el animation lib, se le puede integrar una animacion a los juegos hechos en LUA, y de una forma muy diferente a la que lo quieres, peor facil.

Usa e buscador y escribe animation lib, y encontraras la noticias de esa libreria y su explicacion de su funcion y uso, que por cierto esta bien explicada.


Manual del Perfecto Votante Para un voto libre y justo!.

TheGCProjects

Imagen de Arkanist

gracias.

gracias, ya lo mirare.

se agradece mucho el que puedas preguntar y recibir respuesta al poco rato.

Imagen de Guillermo_Cornielle

XD

No hay de que, para eso estamos.

Saludos. 

Imagen de Arkanist

solucionado

ya lo he solucionado

no me carga las imagenes y

no me carga las imagenes

y las tengo en la misma carpeta que el script 

Imagen de Guillermo_Cornielle

Si pusieras

El codigo de lo que llevas hecho, seria mas facil ayudarte.

yo tambien pense que era el

yo tambien pense que era el codigo y lo cambie por el que esta en este pagina pero sigue igual

no Funciona nada y ya me

no Funciona nada

y ya me desespere

porfavor diganme como se hace

esto me sale 

error: script.lua:3: Image.load: Error loading image.

Imagen de Guillermo_Cornielle

ayudaa

pues veran escribo todo como va les dejo lo que escribi:

hierba = Image.load("grass.png")
jugador = Image.load("player.png")
flor = Image.load("flower.png")

anchoPantalla = 480 - jugador:width()
altoPantalla = 272 - jugador:width()

jugador = {}
jugador[1] = { x = 200, y = 50 }

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

for a = 0, 14 do
for b = 0,8 do
screen:blit(32 * a, 32 * b, hierba)
end
end

screen:blit(100,100,flor)
screen:blit(300,220,flor)
screen:blit(jugador[1].x,jugador[1].y,jugador)

if pad:left() and jugador[1].x > 0 then
jugador[1].x = jugador[1].x - 2
end

if pad:right() and jugador[1].x < anchoPantalla then
jugado[1].x = jugador[1].x + 2
end

if pad:up() and jugador[1].y > 0 then
jugador[1].y = jugador[1].y - 2
end

if pad:down() and jugador[1].y < altoPantalla then
jugador[1].y = jugador[1].y + 2
end

screen.waitVblankStart()
screen.flip()
end

pero cuando lo voy a compilar me dice

error script.lua 26: bad argument #2 to 'blit' (image expected,got table)

que puede ser eso alguien me echa una mano y disculpen si esta en negrita y por favor ayudenme es que es ahora que estoy enpezando en esto.


Manual del Perfecto Votante Para un voto libre y justo!.

TheGCProjects

Imagen de Warezman

ayuda  miren quiero

ayuda 

miren quiero hacer que una moto pase por una montaña pero como puedo poner los limites de la imagen para que pase por arriba de la montaña no atraves de ella que codigo mas nesesito para mas informasion les dejo mi codigo

verde = Color.new(0, 255, 0)
rojo = Color.new(255, 0, 0)
azul = Color.new(0, 0, 255)

hierba = Image.load("imagenes/grass.png")
  jugador = Image.load("imagenes/player2.png")
  flor = Image.load("imagenes/flower.png")
  personaje = Image.load("imagenes/player.png")
 personaje1 = Image.load("imagenes/player.png")
 bleach = Image.load("imagenes/ichigo.png")
 
  anchoPantalla = 480 - jugador:width()
 altoPantalla = 272 - jugador:width()
 
suelo = Image.createEmpty(480, 1)
suelo:clear(verde)
 
Jugador = { }
 Jugador[1] = { x = 0, y = 185}
 
personaje = {}
personaje.gravedad = 185
personaje.y = 185
personaje.x = 0
personaje.velocidadSalto = 5
personaje.estadoSalto = "suelo"
 
while true do
  pad = Controls.read()
  screen:clear()
  
for a = 0, 1 do
     for b = 0,1 do
        screen:blit(32 * a, 32 * b, hierba)
     end
  end 
 
screen:blit(350,220,flor)
  screen:blit(100,220,flor)
  screen:blit(Jugador[1].x,Jugador[1].y,jugador) 
 
if pad:square() then
     personaje.x = personaje.x + 2
  end

if pad:cross() then
     personaje.x = personaje.x - 2
  end

if pad:up() and personaje.estadoSalto == "suelo" then
     personaje.estadoSalto = "saltando"
  end 
 
if personaje.estadoSalto == "saltando" then
     personaje.velocidadSalto = personaje.velocidadSalto - 0.3
     personaje.gravedad = personaje.gravedad - personaje.velocidadSalto
  end
if personaje.velocidadSalto < 0 then
     personaje.estadoSalto = "cayendo"
  end
if personaje.gravedad < 185 and personaje.estadoSalto == "cayendo" then
personaje.velocidadSalto = personaje.velocidadSalto + 0.3
     personaje.gravedad = personaje.gravedad + personaje.velocidadSalto
  end
if personaje.gravedad == 185 then
     personaje.velocidadSalto = 5
     personaje.estadoSalto = "suelo"
  end
if personaje.gravedad > 185 then personaje.gravedad = 185 end
personaje.y = personaje.gravedad

screen:blit(personaje.x,personaje.y,bleach)
  screen:blit(0,250,suelo)

screen:print(10,10,"X: "..personaje.x.." Y: "..personaje.y,verde)
  screen:print(10,20,"estado Salto: "..personaje.estadoSalto,verde)
screen:print(380,10,"Por Lalo_psp",rojo)

screen.waitVblankStart()
  screen.flip()
end

nota: la imagen ichigo es la moto 

Imagen de CkFra

Duda...

El tutorial dice que para obtener el ancho y alto de la imágenes empleemos:

imagen:width()
  imagen:height()

Pero más abajo aparece esto: 

anchoPantalla = 480 - jugador:width()
  altoPantalla = 272 - jugador:width()

No se supone que debería ser así:?

anchoPantalla = 480 - jugador:width()
  altoPantalla = 272 - jugador:heigth()

Pero si se pone así, el archivo no se ejecuta. Entonces no entiendo

Entonces heigth para que sirve?

Saludos

Imagen de Pana

heigth es para la altura (lo

heigth es para la altura (lo que supones :P). Pero como la imagen es cuadrada, basta con poner widht. Es posible que no se ejecute si pones heigth por algun fallo en tu codigo... No se...

De todas formas, juraría que basta con que lo pongas con numeros tu mismo, saltandote esos comandos. El tamaño de la imagen no varia, por lo que siempre el ancho y alto de pantalla será el mismo (no?).

Saludos :P. 

Imagen de CkFra

Pero

entonces, el comando height sirve?

Porque yo lo que hago es cambiar el width, por height; Cn el primero funciona pero con el segundo no.

Claro que puedo poner yo los número como límites, pero si son un porron de imágenes con distintos tamaños, uno se muere! xD

Saludos y gracias

EDITO: Ya me funciona el comando height, la verdad no se por qué ahora sí y antes no :P

Imagen de frikilada

Eso ya lo se pero me refiero a otra cosa

Aver...yo ya he hecho los personajes mirando a izquierda y mirando a derecha, lo que no se es el codigo, ni donde ponerlo para que funcione, se que había que hacer dos personajes mirado a derecha y a izquierda, lo que pasa esque tengo fallos que no los se ver, como el de que el personaje no pisa el suelo...te agradecería que no me trataras como si fuera tonto, solo que estoy empezando y no lo llevo muy claro.

Imagen de frikilada

Aver, te digo a que me refiero...

...yo no lo he echo como el ejemplo, yo he echo un suelo en el que un personaje se mueve y salta.

Lo que pasa esque traspasa el suelo, no lo toca con los pies, si no con la cadera o con otro miembro..y los pies se quedan debajo de el suelo..

Mi otro problema es que el personaje me queda muy pequeño y no se como ponerlo normal, y por último que cuando le doy a que vaya a la derecha parece que camina normal,pero cuando camina hacia la izquierda parece que camina de espaldas, no se en que tutorial se hace eso asique quisiera que me dijerais el codigo para hacerlo o mi script puesto bien para solucionar mis problemas, espero haberme expresado bien, aquí os dejo mi script con mis "fallitos":

verde = Color.new(0, 255, 0)
rojo = Color.new(255, 0, 0)
azul = Color.new(0, 0, 255)
  personaje = Image.load("player.png")
personaje1 = Image.load("player.png")
bleach = Image.load("ichigo.png")
anchoPantalla = 480 - bleach:width()
  altoPantalla = 272 - bleach:width()
suelo = Image.createEmpty(480, 10)
suelo:clear(azul)
personaje = {}
personaje.gravedad = 230
personaje.y = 230
personaje.x = 50
personaje.velocidadSalto = 10
personaje.estadoSalto = "suelo"
while true do
  pad = Controls.read()
  screen:clear()
if pad:left() then
     personaje.x = personaje.x - 2
  end
  if pad:right() then
     personaje.x = personaje.x + 2
  end
if pad:cross() and personaje.estadoSalto == "suelo" then
     personaje.estadoSalto = "saltando"
  end
if personaje.estadoSalto == "saltando" then
     personaje.velocidadSalto = personaje.velocidadSalto - 0.3
     personaje.gravedad = personaje.gravedad - personaje.velocidadSalto
  end
if personaje.velocidadSalto < 0 then
     personaje.estadoSalto = "cayendo"
  end
if personaje.gravedad < 230 and personaje.estadoSalto == "cayendo" then
personaje.velocidadSalto = personaje.velocidadSalto + 0.3
     personaje.gravedad = personaje.gravedad + personaje.velocidadSalto
  end
if personaje.gravedad == 230 then
     personaje.velocidadSalto = 10
     personaje.estadoSalto = "suelo"
  end
if personaje.gravedad > 230 then personaje.gravedad = 230 end
personaje.y = personaje.gravedad

screen:blit(personaje.x,personaje.y,bleach)
  screen:blit(0,250,suelo)

screen:print(10,10,"X: "..personaje.x.." Y: "..personaje.y,verde)
  screen:print(10,20,"estadoSalto: "..personaje.estadoSalto,verde)
screen:print(405,10,"Por Mario",rojo)

screen.waitVblankStart()
  screen.flip()
end

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.