[Ejemplos] Ejemplos sencillos con PySFML! :D

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

[Ejemplos] Ejemplos sencillos con PySFML! :D

Notapor shackra » Jue Ene 06, 2011 6:38 pm

hola a todos!! :D

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 :D
# 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 :D
# 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.
Última edición por shackra el Vie Mar 18, 2011 4:20 am, editado 2 veces en total
Avatar de Usuario
shackra
 
Mensajes: 308
Registrado: Lun Jun 15, 2009 4:10 pm
Ubicación: Costa Rica

Re: [Ejemplos] Ejemplos sencillos con PySFML! :D

Notapor hugoruscitti » Sab Ene 08, 2011 1:16 am

Buenisimo shackra, ¿no te animas a crear un repositorio en bitbucket?, yo
tengo algunos ejemplos mas para compartir, pero me gustaría que sea
por ese medio, así te va a resultar mas fácil administrarlos y compartirlos.

Saludos.
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Re: [Ejemplos] Ejemplos sencillos con PySFML! :D

Notapor shackra » Sab Ene 08, 2011 6:01 am

hugoruscitti escribió:Buenisimo shackra, ¿no te animas a crear un repositorio en bitbucket?, yo
tengo algunos ejemplos mas para compartir, pero me gustaría que sea
por ese medio, así te va a resultar mas fácil administrarlos y compartirlos.

Saludos.

:$
si claro :), que honor ^_^, pero.... como se hace eso de subir a bitbucket?
mientras me explicas, desarrollo el ejemplo donde doraemon camina (según este post: http://www.losersjuegos.com.ar/foro/viewtopic.php?f=6&t=999)

saludos :D
Avatar de Usuario
shackra
 
Mensajes: 308
Registrado: Lun Jun 15, 2009 4:10 pm
Ubicación: Costa Rica

Re: [Ejemplos] Ejemplos sencillos con PySFML! :D

Notapor hugoruscitti » Sab Ene 08, 2011 3:45 pm

shackra escribió:
hugoruscitti escribió:Buenisimo shackra, ¿no te animas a crear un repositorio en bitbucket?, yo
tengo algunos ejemplos mas para compartir, pero me gustaría que sea
por ese medio, así te va a resultar mas fácil administrarlos y compartirlos.

Saludos.

:$
si claro :), que honor ^_^, pero.... como se hace eso de subir a bitbucket?
mientras me explicas, desarrollo el ejemplo donde doraemon camina (según este post: http://www.losersjuegos.com.ar/foro/viewtopic.php?f=6&t=999)

saludos :D


Bitbucket funciona con cuentas de usuario, tienes que dar de alta
una cuenta y luego el sistema de ofrece crear un repositorio, o cuantos
quieras, y luego con un software como mercurial puedes
ir administrando tu codigo para ir subiendo y notificando cambios:

http://mercurial.selenic.com/

Hace unos dias escribi algo de mercurial y bitbucket en un boceto
de tutorial:

http://www.losersjuegos.com.ar/incoming ... adores.pdf

Ten en cuenta que este documento explica otra cosa, no es puntualmente
sobre como usar bitbucket, pero creo que algo de ello te servira.

Ah, la web de bitbucket es:

https://bitbucket.org/

Saludos.
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Re: [Ejemplos] Ejemplos sencillos con PySFML! :D

Notapor shackra » Sab Ene 08, 2011 7:56 pm

entendido, hugoruscitti, cuando tenga un poco mas de tiempo moveré los hilos para trabajar en bitbucket.

saludos ^_^
Avatar de Usuario
shackra
 
Mensajes: 308
Registrado: Lun Jun 15, 2009 4:10 pm
Ubicación: Costa Rica

Re: [Ejemplos] Ejemplos sencillos con PySFML! :D

Notapor kaiser » Dom Ene 23, 2011 7:06 pm

Shackra, muchas gracias por los ejemplos, me están ayudando mucho a iniciarme en ésto de PySFML.

Te comento algunas cosas que he ido detectando en mis propias pruebas:

- En tus ejemplos defines entrada para usar input, pero luego en el bucle principal usas los eventos clásicos osea que no sirve de nada que lo definas si luego no lo usas. He estado probando por mi cuenta y la verdad no tengo ni idea de como se usan los input. Supuestamente hay que definir el input en algún momento del código tal y como haces tú (entrada = ventana.GetInput()) y luego en el bucle principal sería if entrada.IsKeyPressed(sf.Key.Escape):, con eso te debería detectar si la tecla Esc está pulsada, pero a mí por lo menos no me ha funcionado. Si alguien sabe como funciona... que deje un ejemplo en el repositorio de shackra.

- Tu manejas los eventos tal y como pone en los tutoriales de la página oficial, es decir, creas el bucle while not salir y dentro instancias eventos = sf.Event() y después creas el bucle que lee todos los eventos while ventana.GetEvent(eventos). Yo he probado a instanciar eventos fuera del bucle (como hacías con entrada) y no solo me funciona sino que lo hace mejor. Si alguien sabe cual es la diferencia entre instanciarlo dentro o fuera, que lo explique.

- En tus códigos comentas que no es posible utilizar los atributos del evento MouseMoved para obtener la posición del ratón, sin embargo yo lo he probado y me deja hacerlo perfectamente, ten en cuenta que es: eventos.MouseMove.X y no eventos.MouseMoved.X o eventos.Mouse.X.

- Y por último una pregunta. La imagen de fondo de la ventana de juego, la escena (para llamarlo como se llama en pilas), es necesario tratarla como sprite o existe alguna forma especial de manejar éstas imágenes que son más grandes y estáticas que un sprite típico. Recuerdo que SDL las trataba de diferente manera.

Un Saludo!
De la API al IDE y del IDE a la API.
Avatar de Usuario
kaiser
 
Mensajes: 121
Registrado: Mié Nov 24, 2010 7:47 pm
Ubicación: Madrid (España)

Re: [Ejemplos] Ejemplos sencillos con PySFML! :D

Notapor hugoruscitti » Lun Ene 24, 2011 12:26 am

shackra escribió:entendido, hugoruscitti, cuando tenga un poco mas de tiempo moveré los hilos para trabajar en bitbucket.

saludos ^_^


Shackra, hoy subí algunos ejemplos al repo. Están en el directorio "hugo", si querés organizalos
de otra manera, traté de darles un número en base a la dificultad.

https://bitbucket.org/shackra/ejemplos-pysfml/overview


Saludos.
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Re: [Ejemplos] Ejemplos sencillos con PySFML! :D

Notapor pchack » Mar Ene 25, 2011 9:41 pm

buenísima iniciativa de crear algunos ejemplos para entender el funcionamiento
de pysfml, realmente útiles

buenísimo, saludos.
pchack
 
Mensajes: 106
Registrado: Lun Dic 13, 2010 12:23 am

Re: [Ejemplos] Ejemplos sencillos con PySFML! :D

Notapor shackra » Lun Ene 31, 2011 2:07 am

hugoruscitti escribió:
shackra escribió:entendido, hugoruscitti, cuando tenga un poco mas de tiempo moveré los hilos para trabajar en bitbucket.

saludos ^_^


Shackra, hoy subí algunos ejemplos al repo. Están en el directorio "hugo", si querés organizalos
de otra manera, traté de darles un número en base a la dificultad.

https://bitbucket.org/shackra/ejemplos-pysfml/overview


Saludos.

genial :D, bueno, tu aproximacion es buena sobre los numeros segun dificultad, pero, en mis ejemplos use numeros porque pretendia marcar una "evolucion" del mismo script (sip, es el mismo script pero fue creciendo en cantidad de funciones y complejidad).

si alguien mas desea acceso de escritura al repositorio solo avise por medio de este post!.

Kaiser: le hablas a otro novato, yo solía usar PyGame (bueno, era como usar SDL...) pero yo hice esos ejemplos leyendo un poco de codigo de unos proyectos que Hugo tenia en google code, creo que era Shaolin Fury en su version PySFML... no recuerdo ahora. deberias hacer las modificaciones al codigo como tu lo indicas y mostrarme por acá lo que logras!

saludos gente!!

Edito: Hugo, estaba ojeando el repo con mas profundidad, y me parece genial los titulos de los ejemplos (aun tengo que bajarlos y probarlos por mis propios medios) casi que complementas lo que yo aun no he podido hacer :D. deberias hacerte uno donde expliques como cambiar de "escenas" en un juego, eso me esta matando xD.

Vuelvo a editar, glol:Hugo, no seas tan timido, comenta mas el codigo que escribes!!! D:
Avatar de Usuario
shackra
 
Mensajes: 308
Registrado: Lun Jun 15, 2009 4:10 pm
Ubicación: Costa Rica

Re: [Ejemplos] Ejemplos sencillos con PySFML! :D

Notapor .teri » Mié Feb 02, 2011 2:53 pm

kaiser escribió:- Tu manejas los eventos tal y como pone en los tutoriales de la página oficial, es decir, creas el bucle while not salir y dentro instancias eventos = sf.Event() y después creas el bucle que lee todos los eventos while ventana.GetEvent(eventos). Yo he probado a instanciar eventos fuera del bucle (como hacías con entrada) y no solo me funciona sino que lo hace mejor. Si alguien sabe cual es la diferencia entre instanciarlo dentro o fuera, que lo explique.


Al instanciar dentro del bucle el objecto sf.Event se crea una y otra vez dicho y objeto, y el viejo está a la espera de ser tratado por el recolector de basura. El recolector de basura mira si está referenciado cada uno de los objetos creados, si no están referenciados pues libera toda la memoria reservada de golpe de los objetos no referenciados. Al instanciar fuera del bucle, se crea una sola vez y además ya está referenciado, por lo que no es tratado por el recolector de basura.
.teri
 
Mensajes: 38
Registrado: Dom Oct 01, 2006 4:41 pm

Re: [Ejemplos] Ejemplos sencillos con PySFML! :D

Notapor shackra » Jue Feb 03, 2011 7:15 pm

.teri escribió:
kaiser escribió:- Tu manejas los eventos tal y como pone en los tutoriales de la página oficial, es decir, creas el bucle while not salir y dentro instancias eventos = sf.Event() y después creas el bucle que lee todos los eventos while ventana.GetEvent(eventos). Yo he probado a instanciar eventos fuera del bucle (como hacías con entrada) y no solo me funciona sino que lo hace mejor. Si alguien sabe cual es la diferencia entre instanciarlo dentro o fuera, que lo explique.


Al instanciar dentro del bucle el objecto sf.Event se crea una y otra vez dicho y objeto, y el viejo está a la espera de ser tratado por el recolector de basura. El recolector de basura mira si está referenciado cada uno de los objetos creados, si no están referenciados pues libera toda la memoria reservada de golpe de los objetos no referenciados. Al instanciar fuera del bucle, se crea una sola vez y además ya está referenciado, por lo que no es tratado por el recolector de basura.

acabaramos, ya entiendo, gracias por la aclaracion!!! ;)
Avatar de Usuario
shackra
 
Mensajes: 308
Registrado: Lun Jun 15, 2009 4:10 pm
Ubicación: Costa Rica

Nuevos ejemplos subidos!!

Notapor shackra » Jue Mar 17, 2011 10:58 pm

hay nuevos ejemplos, el ejemplo 7 y 8 cubren animación con distintas maneras de manejar una spritesheet, sonido + animación de sprite, mando con keyboard y joystick (para futuras revisiones del ejemplo8.py ;) claro esta...)

saludos y no duden en postear preguntas y sugerencias... si desean arreglar código del repositorio solo pidan acceso al mismo por este medio, yo les daré los permisos necesarios, deben darse de alta en bitbucket.org y darme vuestro nombre de usuario.

EDITO: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH!!!!

borre los ficheros de hugo por accidente (hg push -f), m*erda!!!, Hugo, no podes re-subirlos al repositorio??
me di cuenta luego de leer http://hginit.com/02.html y de revisar el repositorio :-/... fail.

mil disculpas!! ;(
Avatar de Usuario
shackra
 
Mensajes: 308
Registrado: Lun Jun 15, 2009 4:10 pm
Ubicación: Costa Rica

Re: Nuevos ejemplos subidos!!

Notapor hugoruscitti » Vie Mar 18, 2011 1:05 am

shackra escribió:borre los ficheros de hugo por accidente (hg push -f), m*erda!!!, Hugo, no podes re-subirlos al repositorio??
me di cuenta luego de leer http://hginit.com/02.html y de revisar el repositorio :-/... fail.


Ahí los restauré, creo que no habías hecho "pull" y por eso el repo se dividió en dos
ramas... en el gráfico de bitbucket se ve bien: https://bitbucket.org/shackra/ejemplos- ... changesets
observa que a la izquierda de los commits se ve una linea verde y amarilla indicando de donde
procede cada commit...
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Re: Nuevos ejemplos subidos!!

Notapor shackra » Vie Mar 18, 2011 4:23 am

hugoruscitti escribió:
shackra escribió:borre los ficheros de hugo por accidente (hg push -f), m*erda!!!, Hugo, no podes re-subirlos al repositorio??
me di cuenta luego de leer http://hginit.com/02.html y de revisar el repositorio :-/... fail.


Ahí los restauré, creo que no habías hecho "pull" y por eso el repo se dividió en dos
ramas... en el gráfico de bitbucket se ve bien: https://bitbucket.org/shackra/ejemplos- ... changesets
observa que a la izquierda de los commits se ve una linea verde y amarilla indicando de donde
procede cada commit...


no es que no lo hiciera, fue que no sabia xD... pero ahí con el tutorial me di cuenta xD.
de verdad que lo siento, ya estoy agarrando mas practica con esto de mercurial, un poco mas y me dispongo a escribir un articulo en la wiki de losersjuegos :).

saludos!
Avatar de Usuario
shackra
 
Mensajes: 308
Registrado: Lun Jun 15, 2009 4:10 pm
Ubicación: Costa Rica


Volver a Ejemplos

¿Quién está conectado?

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