Cambiar color de imagen (y una barra de vida) en Pygame

Losersjuegos cuenta con una secciones de ejemplos en su web. Utilice esta sección para consultar o proponer ideas acerca de ellos.

Cambiar color de imagen (y una barra de vida) en Pygame

Notapor Barajas » Sab Sep 03, 2011 2:23 am

Buenas. Últimamente no he estado mucho tiempo por aquí, pero es que estuve ocupado con un par de proyectos.
Dejemos eso y pasemos a lo interesante :)

Bueno, muchos de nosotros hemos querido cambiar el color de una imagen. Así que investigando, me encontré que para hacerlo, se necesita convertir la imagen primeramente en un arreglo de píxeles. Asi, buscamos en el arreglo el color que nos interesa cambiar, y lo remplazamos por otro :)
¿Como se hace? Bueno, aquí el código, y de paso su implementación para hacer una barra de vida :)

#!/usr/bin/python
#_*_ coding: utf-8 _*_
import os
import sys
from pygame.locals import *
import pygame
Alto=400 #variables para las dimensiones de la pantalla
Ancho=600
#asumo que no tengo que explicar como se carga la imagen...
# :)
def Cargar_img(direccion):
direccion_imagen=os.path.join(direccion)
try:
imagen=pygame.image.load(direccion_imagen)
except:
print "faltal error:0001"
imagen=imagen.convert()
colorimagen=imagen.get_at((0,0))
imagen.set_colorkey(colorimagen,RLEACCEL)
return imagen

def Remplaza_color(imagen, color, recolor, distancia = 0):
#y asi de simple se remplaza un color :)
#la funcion resive como argumento la imagen
#el color que queremos remplazar
#y con que color lo queremos remplazar
#distancia es para los colores que,
#sin ser en RGB iguales, al ojo lucen exactamente igual.
pixel_array = pygame.PixelArray(imagen) #la traformamos en arreglo
#por suerte, pygame inclulle una funcion que lo hace XD
pixel_array.replace(color, recolor, distancia)
pixel_array.make_surface() #lo convertimos en imagen

#este es mi MAIN... disculpen el nombre...
def Rempla():
pygame.init()#inicializa el juego
pantalla=pygame.display.set_mode((Ancho,Alto))
pygame.display.set_caption("Remplaza color")
imagen_1 = Cargar_img("barra.png")
imagen_2 = Cargar_img("barra.png")
imagen_3 = Cargar_img("barra.png")
imagen_1.set_alpha(125) #le ponemos una trasparencia
Remplaza_color(imagen_2, (0,0,0), (10,250,10),0.7)
Remplaza_color(imagen_3, (0,0,0), (200,10,10),0.7)
continuar = True
x = 2
aumento = True
while continuar:
for evento in pygame.event.get(): #para registrar los ventos como oprimir teclas
if evento.type==pygame.QUIT:
pygame.quit()#salir del juego
continuar=False
sys.exit()
pantalla.fill((250,250,250))
pantalla.blit(imagen_3,(0,0)) #la imagen de fondo
pantalla.blit(imagen_2, (0,0), (0,0,x,35)) #la que representa la vida
pantalla.blit(imagen_1, (0,0)) #la que hace que se vea el "volumen"
if aumento:
x+=0.5
if not(aumento):
x-=0.5
if x>=319 or x<=1:
aumento = not(aumento)
pygame.display.flip()

Rempla()


Adjunto la imagen que utilizo.
¿Alguna sugerencia? ¿Dudas? :D
Vi veri universum vivus vici
Avatar de Usuario
Barajas
 
Mensajes: 209
Registrado: Mar Nov 16, 2010 12:06 am

Re: Cambiar color de imagen (y una barra de vida) en Pygame

Notapor Aborgna » Sab Sep 03, 2011 2:48 pm

Muchas gracias, creo que me va a servir.

Solo una pregunta, ¿ la imagen con el color convertido es lisa o, si tenes una variable "distancia" un poco mas grande, se puede usar para teñirla nada mas?
Avatar de Usuario
Aborgna
 
Mensajes: 11
Registrado: Lun May 23, 2011 4:08 pm
Ubicación: Buenos Aires, Argentina

Re: Cambiar color de imagen (y una barra de vida) en Pygame

Notapor Barajas » Lun Sep 05, 2011 3:38 am

Puedes probar lo que sucede si uses este código en lugar del otro
#!/usr/bin/python
#_*_ coding: utf-8 _*_
import os
import sys
from pygame.locals import *
import pygame
Alto=400
Ancho=600
def Cargar_img(direccion):
direccion_imagen=os.path.join(direccion)
try:
imagen=pygame.image.load(direccion_imagen)
except:
print "faltal error:0001"
imagen=imagen.convert()
colorimagen=imagen.get_at((0,0))
imagen.set_colorkey(colorimagen,RLEACCEL)
return imagen

def Remplaza_color(imagen, color, recolor, distancia = 0):
pixel_array = pygame.PixelArray(imagen)
pixel_array.replace(color, recolor, distancia)
pixel_array.make_surface()

def Rempla():
pygame.init()
pantalla=pygame.display.set_mode((Ancho,Alto))
pygame.display.set_caption("Remplaza color")
imagen_0 = Cargar_img("barra.png")
imagen_1 = Cargar_img("barra.png")
imagen_2 = Cargar_img("barra.png")
imagen_3 = Cargar_img("barra.png")
Remplaza_color(imagen_0, (0,0,0), (10,250,10),distancia = 0)
Remplaza_color(imagen_1, (0,0,0), (10,250,10),distancia = 0.1)
Remplaza_color(imagen_2, (0,0,0), (10,250,10),distancia = 0.5)
Remplaza_color(imagen_3, (0,0,0), (10,250,10), distancia = 1)
continuar = True
while continuar:
for evento in pygame.event.get():
if evento.type==pygame.QUIT:
pygame.quit()
continuar=False
sys.exit()
pantalla.fill((250,250,250))
pantalla.blit(imagen_0,(0,0)) #sin distancia
pantalla.blit(imagen_1,(0,100)) #con distancia baja
pantalla.blit(imagen_2, (0,200)) #con mayor distancia
pantalla.blit(imagen_3, (0,300)) #con toda la distancia
pygame.display.flip()

Rempla()

Bueno, no sé si esto responda tu pregunta...
P.D. Perdona la tardanza.
Vi veri universum vivus vici
Avatar de Usuario
Barajas
 
Mensajes: 209
Registrado: Mar Nov 16, 2010 12:06 am

Re: Cambiar color de imagen (y una barra de vida) en Pygame

Notapor kingwar » Sab Nov 26, 2011 7:17 pm

Gracias por el codigo compa. :shock: :idea: :D :wink:

lo utilizare en mi proyecto que hasta ahora -digo ahora por tu codigo - utilizaba un solo color y lo cambiaba y en otros modelos cambiaba la imagen.

gracias.!
"pero si estudias computacion deberias saber manejar todos los programas" conclusion:usuario no es gente

-linkingcrk- http://baulprogramas.blogspot.com/
Avatar de Usuario
kingwar
 
Mensajes: 35
Registrado: Dom Abr 10, 2011 9:32 pm
Ubicación: Venezuela-Miranda


Volver a Ejemplos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado