
hace meses que me invade una gran necesidad de migrar de pygame a PySFML, por las bondades que trae este ultimo, la verdad me a parecido una buena biblioteca para el desarrollo de vídeo juegos en dos dimensiones.
unos de mis problemas era la poca documentación que existía para los bindings (se escribe asi?) de SFML para python, pero eso se arregla buscando código en google escrito con ese modulo... he aqui varios resultados:
ejemplo1.py: un sencillo ejemplo que muestra texto y la posición del puntero del mouse dentro de la ventana del juego.
from PySFML import sf
# referecia para los perdidos (como yo xD)
# http://www.google.com/codesearch/p?hl=e ... ang:python
#creamos una nueva ventana
ventana = sf.RenderWindow(sf.VideoMode(800, 600), "Prueba con PySFML Por Shackra")
# obtenemos el input de los eventos de la ventana creada, mira sf.Input para mas informacion
# parece ser que no es necesario declarar este objeto dentro del loop para actualizar su estado...
entrada = ventana.GetInput()
#creamos una cadena para mostrar en la pantalla
texto = sf.String("Hola Mundo!")
#iniciamos el loop del juego
salir = False
while not salir:
eventos = sf.Event()
while ventana.GetEvent(eventos):
if eventos.Type == sf.Event.Closed:
salir = True
if eventos.Type == sf.Event.MouseMoved:
#no comprendo por qué no es posible usar los atributos del evento, pero en fin....
x = entrada.GetMouseX()
y = entrada.GetMouseY()
#help(entrada)
texto = sf.String("Hola Mundo!, evento: {0}, {1}".format(x,y,))
if eventos.Type == sf.Event.KeyPressed:
if eventos.Key.Code == sf.Key.Escape:
salir = True
#limpiamos la ventana y dibujamos la cadena
ventana.Clear(sf.Color.Red)
ventana.Draw(texto)
ventana.Display()
ventana.Close()
ejemplo2.py: un ejemplo sencillo que muestra texto y un circulo rojo moviéndose en la misma posición que la del puntero del mouse dentro de la ventana del juego.
from PySFML import sf
# referecia para los perdidos (como yo xD)
# http://www.google.com/codesearch/p?hl=e ... ang:python
# creamos la ventana del juego
ventana = sf.RenderWindow(sf.VideoMode(800, 600), "Prueba 2 con PySFML Por Shackra")
# obtenemos el input de los eventos de la ventana creada, mira sf.Input para mas informacion
# parece ser que no es necesario declarar este objeto dentro del loop para actualizar su estado...
entrada = ventana.GetInput()
# creamos una cadena para mostrar texto en la ventana del juego
texto = sf.String("Posicion del circulo rojo {0}x, {1}y".format(0,0))
# creamos un grafico, un circulo rojo que se movera en conjunto con el puntero del mouse
# sf.Shape.Circle(X, Y, Radius, Col, Outline = 0., OutlineCol = sf.Color(0, 0, 0))
circulo = sf.Shape.Circle(0, 0, 40, sf.Color(255, 0, 0), 1.0, sf.Color(255, 255, 255))
# iniciamos el loop del juego
salir = False
while not salir:
eventos = sf.Event()
while ventana.GetEvent(eventos):
if eventos.Type == sf.Event.Closed:
salir = True
if eventos.Type == sf.Event.MouseMoved:
#no comprendo por que no es posible usar los atributos del evento, pero en fin
x = entrada.GetMouseX()
y = entrada.GetMouseY()
#actualizamos la posicion del circulo rojo y el texto con las coordenadas en la ventana del juego.
#para mas informacion mira sf.Drawable para ver mas metodos para objetos dibujables en la ventana de juego
circulo.SetPosition(x,y)
texto = sf.String("Posicion del circulo rojo: {0}x, {1}y".format(x, y))
if eventos.Type == sf.Event.KeyPressed:
if eventos.Key.Code == sf.Key.Escape:
salir = True
# limpiamos la ventama y dibujamos los objetos en la pantalla
ventana.Clear(sf.Color.Black)
ventana.Draw(texto)
ventana.Draw(circulo)
#ahora, una vez dibujados los objetos, cambiamos los buffers
ventana.Display()
ventana.Close()
ejemplo3.py: creo que este es el ejemplo mas divertidos de todos, mostramos un circulo que cambia de radio y color al azar cuando se mueve el puntero del mouse dentro de la ventana del juego (también emite un sonido cuando es movido!).
from PySFML import sf
import random, os
# referecia para los perdidos (como yo xD)
# http://www.google.com/codesearch/p?hl=e ... ang:python
# Como que me da mucha pereza y usare los objetos de color de sf.Color,
# Vamos a usar variables para esos objetos de color.
Red = sf.Color.Red
Black = sf.Color.Black
White = sf.Color.White
# un alias para un metodo del modulo random, entre mas compacto, mejor para el codigo
azar = random.randint
# creamos la ventana del juego
ventana = sf.RenderWindow(sf.VideoMode(800,600), "Prueba 3 con PySFML por Shackra")
# obtenemos el input de los eventos de la ventana creada, mira sf.Input para mas informacion
# parece ser que no es necesario declarar este objeto dentro del loop para actualizar su estado...
entrada = ventana.GetInput()
# creamos una cadena para mostrar texto en la ventana del juego
texto = sf.String("Posicion del circulo rojo {0}x, {1}y".format(0,0))
# creamos un grafico, un circulo rojo que se movera en conjunto con el puntero del mouse
# sf.Shape.Circle(X, Y, Radius, Col, Outline = 0., OutlineCol = sf.Color(0, 0, 0))
circulo = sf.Shape.Circle(0, 0, 10, Red, 1.0, White)
# creamos un buffer para abrir un archivo de audio
buffer = sf.SoundBuffer()
if not buffer.LoadFromFile("point.ogg"):
exit(1)
# ahora creamos un objeto de sonido para reproducir nuestro buffer
sonido = sf.Sound()
sonido.SetBuffer(buffer)
sonido.SetVolume(100)
#sonido.Play()
# iniciamos el loop del juego
salir = False
while not salir:
eventos = sf.Event()
while ventana.GetEvent(eventos):
if eventos.Type == sf.Event.Closed:
salir = True
if eventos.Type == sf.Event.MouseMoved:
#no comprendo por que no es posible usar los atributos del evento, pero en fin
x = entrada.GetMouseX()
y = entrada.GetMouseY()
#creamos nuevamente el circulo, pero esta vez con un "size" aleatorio, se vera mas animado xD
#tambien pintamos el relleno del circulo de diferente color, mas hippie, glol
circulo = sf.Shape.Circle(0, 0, azar(5, 100), sf.Color(azar(1,255), azar(1,255), azar(1,255)), 2.0, White)
#actualizamos la posicion del circulo rojo y el texto con las coordenadas en la ventana del juego.
#para mas informacion mira sf.Drawable para ver mas metodos para objetos dibujables en la ventana de juego
circulo.SetPosition(x, y)
texto = sf.String("Posicion del circulo rojo: {0}x, {1}y".format(x, y))
#si el circulo se mueve reproduciremos un sonido.
sonido.Play()
if eventos.Type == sf.Event.KeyPressed:
if eventos.Key.Code == sf.Key.Escape:
salir = True
#limpiamos la ventana y dibujamos los objetos en la pantalla
ventana.Clear(Black)
ventana.Draw(circulo)
ventana.Draw(texto)
ventana.Display()
ventana.Close()
si deseas bajar los códigos fuentes con todos sus archivos puedes hacerlo desde el siguiente enlace: http://www.4shared.com/file/wV15qDln/mis_ejemplos.html
Editado por juanxo: no salía bien el enlace
Editado por Shackra: a mi me funciona bien el enlace, suele suceder, intenta otra vez.