Tutoriales y Ayudas

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

Tutoriales y Ayudas

Notapor yasser_001200 » Mié Oct 08, 2008 7:53 pm

Necesito tutoriales aerca de como usar las funciones de la librería pygame.

O sea:

Cómo poner una imagen 2D ( que ya me lo sé )
Como poner un texto con tipo de fuente y tamaño
Aplicaciones TCP/IP
Incluir un video en el proyecto
Abrir archivos de audio: *.wav, *.mp3, etc
Y que esté bien explicado ya que pygame.org no me da mucha explicación...creo
Vienbeni2 a mi mundo....WAJAJAJAJAJA
yasser_001200
 
Mensajes: 46
Registrado: Lun May 19, 2008 3:28 pm

Notapor hugoruscitti » Jue Oct 09, 2008 2:20 pm

pero yasser.... son muchas cosas, pareciera que siquiera
lo has buscado por tu cuenta. Te recomiendo leer un
artículo sobre cómo hacer consultas en foros para obtener
buenas respuestas:

http://www.sindominio.net/ayuda/pregunt ... entes.html

es mucho mas gratificante para todos si te concentras en un
tema, intentas hacerlo por tu cuenta y luego consultas si no
llegas al resultado esperado. En cierta manera, a todos nos
falta esa documentación...
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Re: Tutoriales y Ayudas

Notapor yasser_001200 » Mar Ago 31, 2010 4:11 pm

Hola. Espero que me respondan.

Pasa que quiero aprender a usar el pygame para tener algo en qué programar juegos Linux. Lo mismo me ocurre con el SDL. Actualmente me defiendo con el GameMaker, pero esto solo sirve para sistema Linux. Por lo tanto lo que más necesito son proyectos de pygame y de SDL sencillos y ya hechos para yo ir viendolo como funciona cada cosa que me interesa: manipular un Sprite con el teclado, sonidos, colisiones, fondo musical, etc.

¿Me podrían ayudar en eso?
Vienbeni2 a mi mundo....WAJAJAJAJAJA
yasser_001200
 
Mensajes: 46
Registrado: Lun May 19, 2008 3:28 pm

Re: Tutoriales y Ayudas

Notapor adrigm77 » Mar Ago 31, 2010 5:59 pm

No sé si será spam por ser mi propio blog, pero aquí tienes un tuto de pygame que hice: http://razonartificial.com/tutoriales-pygame/
Razón Artificial - La ciencia y el arte de crear videojuegos.
Avatar de Usuario
adrigm77
 
Mensajes: 43
Registrado: Dom Jul 25, 2010 8:03 pm
Ubicación: Las Palmas de Gran Canaria, España

Re: Tutoriales y Ayudas

Notapor carlostex » Mar Ago 31, 2010 7:20 pm

http://www.losersjuegos.com.ar/referencia/libros aqui tienes unas serie de tutoriales, SDL, python, C++, todo lo necesario para empezar con videjuegos
esta en esa pagina, asi que a leer mucho. Tambien bajate algunos ejemplos de esta web que esten hechos con pygame y tambien aprenderas de esa forma
El conocimiento de unos es conocimiento de todos.
Avatar de Usuario
carlostex
 
Mensajes: 249
Registrado: Mar Jul 14, 2009 4:13 am
Ubicación: mexico

Re: Tutoriales y Ayudas

Notapor yasser_001200 » Mié Sep 01, 2010 6:36 pm

sí, ya me bajé unas cuantas cosas. Luego entonces, me pondré a leerlas y tomar nota. Gracias comunidad, son lo maximo. Luego vendré con más preguntas y dudas
Vienbeni2 a mi mundo....WAJAJAJAJAJA
yasser_001200
 
Mensajes: 46
Registrado: Lun May 19, 2008 3:28 pm

Re: Tutoriales y Ayudas

Notapor yasser_001200 » Lun Sep 13, 2010 2:18 pm

Les dije que venía con más preguntas y dudas. he aquí una. Estaba haciendo un programa basado en ejemplo para cargar videos en python. el código fue el siguiente:

import pygame,sys, os
from pygame.locals import *

pygame.init()
scr=pygame.display.set_mode((800,600))
pygame.display.set_caption('Displaying video...')

pygame.display.flip()

video=pygame.movie.Movie('mi video.mpg')
video.play()

while True:
for evt in pygame.event.get():
if evt.type==pygame.QUIT:
peli.stop()
pygame.quit()


Aún así el video no sale. ¿Qué me está faltando?
Vienbeni2 a mi mundo....WAJAJAJAJAJA
yasser_001200
 
Mensajes: 46
Registrado: Lun May 19, 2008 3:28 pm

Re: Tutoriales y Ayudas

Notapor yasser_001200 » Mar Sep 14, 2010 8:31 pm

Hola, revisen mmi codigo, ambos

en este kiero mover el sprite con el teclado

import pygame,sys
from pygame.locals import *


def load_image(nombre):
image=pygame.image.load(nombre)
image_rect=image.get_rect()
return image, image_rect

class Heroe(pygame.sprite.Sprite):
def __init__(self):
#se inicia la instancia de pygame de sprites
pygame.sprite.Sprite.__init__(self)
self.image, self.rect=load_image('data/hero.png')
self.rect.move_ip(40,240)
def update(self):
pos=[self.rect.x,self.rect.y]
self.rect.move_ip(pos)

def walk_on(self,x,y):
self.x=self.rect.x=40
self.y=self.rect.y=400
newpos=self.rect.move((self.x,self.y))
self.rect=newpos





pygame.init()

img,img_rc=load_image('data/fondo.jpg')

wid,hei=[img_rc.width,img_rc.height]

fondo_pos=[ wid, hei]


scr=pygame.display.set_mode((wid,hei))
pygame.display.set_caption('Manejando un Sprite')
pygame.display.flip()

fondo=pygame.Surface(scr.get_size())
fondo=fondo.convert()
fondo.blit(img,fondo_pos)

scr.blit(img,(0,0))
pygame.display.flip()


hero=Heroe()
hero_sprite=pygame.sprite.RenderPlain((hero))
hero_sprite.update()
hero_sprite.draw(scr)
pygame.display.flip()


reloj=pygame.time.Clock()

while True:
for evt in pygame.event.get():
if evt.type==pygame.QUIT:
pygame.quit()
if evt.type==pygame.KEYDOWN:
if evt.key in [K_LEFT, K_a]:
hero.walk_on(5,0)



y en este kiero kitar el pestañeo

import pygame,sys
from pygame.locals import *


def load_image(nombre):
image=pygame.image.load(nombre)
image_rect=image.get_rect()
return image, image_rect

class Heroe(pygame.sprite.Sprite):
def __init__(self):
#se inicia la instancia de pygame de sprites
pygame.sprite.Sprite.__init__(self)
self.image, self.rect=load_image('data/hero.png')
self.rect.move_ip(40,240)
def update(self):
pos=pygame.mouse.get_pos()
self.rect.center=pos





pygame.init()

img,img_rc=load_image('data/fondo.jpg')

wid,hei=[img_rc.width,img_rc.height]

fondo_pos=[ wid, hei]


scr=pygame.display.set_mode((wid,hei),DOUBLEBUF)
pygame.display.set_caption('Manejando un Sprite')
pygame.display.flip()


fondo=pygame.Surface(scr.get_size())
fondo=fondo.convert()
fondo.blit(img,fondo_pos)



scr.blit(fondo,(0,0))
pygame.display.flip()


scr.blit(img,(0,0))
pygame.display.flip()


hero=Heroe()
hero_sprite=pygame.sprite.RenderPlain((hero))
hero_sprite.update()
hero_sprite.draw(scr)
pygame.display.flip()

reloj=pygame.time.Clock()

reloj=pygame.time.Clock()

while True:
reloj.tick(60)
for evt in pygame.event.get():
if evt.type==pygame.QUIT:
pygame.quit()
if evt.type==KEYDOWN:
if evt.key==K_ESCAPE:
pygame.quit()

scr.blit(fondo,(0,0))
pygame.display.flip()
scr.blit(img,(0,0))
pygame.display.flip()
hero_sprite.update()
scr.blit(img,fondo_pos)
hero_sprite.draw(scr)
pygame.display.flip()
Vienbeni2 a mi mundo....WAJAJAJAJAJA
yasser_001200
 
Mensajes: 46
Registrado: Lun May 19, 2008 3:28 pm

Re: Tutoriales y Ayudas

Notapor Juanxo » Mar Sep 14, 2010 10:35 pm

buenas yasser...
En el primero creo que el problema viene dado porque solo muestras una vez la pantalla, prueba a poner el pygame.display.flip() dentro del bucle del juego

Para el segundo, editalo antes y ponle la etiqueta al código.( ["code]["/code] sin las comillas)

Código sin etiquetas

Código: Seleccionar todo
Codigo con etiquetas
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: Tutoriales y Ayudas

Notapor yasser_001200 » Mié Sep 15, 2010 2:06 pm

Este es otro problema. Quiero poner un texto pero pygame me retorna un error dicendome Text has zero width y no entiendo que es lo que quiere decir. Este es el código:

Código: Seleccionar todo
fondo=pygame.Surface(scr.get_size())
fondo=fondo.convert()


fnt=pygame.font.Font(None,32)
texto=fnt.render('Hero with a skateboard',1,(10,20,30))
texto_pos=[10,10]
fondo.blit(texto,texto_pos)
scr.blit(fondo,(0,0))


scr es la pantalla y fondo es un Surface de fondo
Vienbeni2 a mi mundo....WAJAJAJAJAJA
yasser_001200
 
Mensajes: 46
Registrado: Lun May 19, 2008 3:28 pm

Re: Tutoriales y Ayudas

Notapor Juanxo » Mié Sep 15, 2010 2:10 pm

prueba a cambiar la comilla en el texto(en vez de usar ' usa ")
Y edita los posts anteriores para ponerles lo de [codigo] anda
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: Tutoriales y Ayudas

Notapor yasser_001200 » Jue Sep 16, 2010 3:21 pm

Hola a todos:

Al fin he logrado hacer que un sprite se mueva. Realmente había subestimado al pygame poniendolo por debajo del GameMaker (aunque hablando de sprites y colisiones GameMaker le da 1000 de ventaja). Este es el proyecto que hice ayer en casa. Necesito que lo vean y me digan que les parece. Luego me dicen como hacerle un Flip Vertical para invertir al 'héroe'. Hoy descubrí como hacerle un snapshot a la pantalla. Ya sin más chachara, mi proyecto:


los controles son :
SPACE para atacar
LEFT/RIGHT/UP/DOWN: para moverse
(cheken y diganme por ké no se mueve en diagonal)
(P.D: los sprites son de un DevinArt de Paul Robertson... creo )

http://www.2shared.com/file/paKOsTQu/yasser_demo.html
http://www.2shared.com/fadmin/16248420/7210ffea/yasser_demo.rar.html


Esto fue posible gracias a los ejemplos que hay subidos a la Comunidad. Los
Vienbeni2 a mi mundo....WAJAJAJAJAJA
yasser_001200
 
Mensajes: 46
Registrado: Lun May 19, 2008 3:28 pm

Re: Tutoriales y Ayudas

Notapor Juanxo » Jue Sep 16, 2010 5:40 pm

algunos comentarios a primera vista:

* Nunca cargues un archivo más de una vez. Es el caso de las imágenes y el sonido en tu caso. Guarda una lista de las imágenes dentro del héroe y en función del estado puedes ir seleccionando la imagen.

mira tu init:

Código: Seleccionar todo
def __init__(self):

        #se inicia la instancia de pygame de sprites

        pygame.sprite.Sprite.__init__(self)

        self.image, self.rect=load_image('data/hero.png')

        self.rect.midbottom=pos=[40,540]

        self.walking=0

        self.pos=0

        self.anim_frame=0

Fijate que parece que asignas 2 veces un valor a pos.

En cuanto a lo de mover... prueba a utilizar esto:

Código: Seleccionar todo
def update(self):

        teclas = pygame.key.get_pressed()

        dx = 0
        dy = 0
        if teclas[K_LEFT]:

            self._walk()

            dx = -5
        elif teclas[K_RIGHT]:

           self._walk()
           dx = 5
        if teclas[K_UP]:

            self._walk()

            dy = -5
        elif teclas[K_DOWN]:

            self._walk()

            dy = 5

        if teclas[K_SPACE]:

            pygame.time.delay(80)

            self._ataca()

        if teclas[K_k]:

            self.kill()

           

        self.rect.move_ip(dx, dy)       

        self.pos=self.rect.topleft
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: Tutoriales y Ayudas

Notapor adrigm77 » Vie Sep 17, 2010 1:45 am

Realmente había subestimado al pygame poniendolo por debajo del GameMaker (aunque hablando de sprites y colisiones GameMaker le da 1000 de ventaja)


No sabes ni lo que estas diciendo. Pygame es un biblioteca gráfica para Python, por lo que se encarga de gestionar todo el tema de multimedia. ¿Quieres un buen sistema de sprites? Programalo. ¿Quieres un buen sistema de colisiones? Programalo.

Olvídate de comarar un lenguaje y una biblioteca con un "Game Maker" te aseguro que todo lo que puedes hacer en game maker lo puedes hacer en python + bibliotecas.
Razón Artificial - La ciencia y el arte de crear videojuegos.
Avatar de Usuario
adrigm77
 
Mensajes: 43
Registrado: Dom Jul 25, 2010 8:03 pm
Ubicación: Las Palmas de Gran Canaria, España

Re: Tutoriales y Ayudas

Notapor yasser_001200 » Vie Sep 17, 2010 4:18 pm

Hola a todos:

vean este código que no hay manera de que me salga bien. Lo que quiero es que aparezca un sprite en la posición del mouse cuando haga cick, y todo lo que hace es aparecer en el mismo lugar:

Código: Seleccionar todo
import os,sys
import pygame
from pygame.locals import *

WIDTH  = 640
HEIGHT = 480


def load_image(nombre):
    imagen=pygame.image.load(nombre)
    img_rc=imagen.get_rect()
    return imagen, img_rc


class GuitarHero(pygame.sprite.Sprite):
    def __init__(self, pos):
        pygame.sprite.Sprite.__init__(self)
        self.image, self.rect = load_image('data/scot0001.png')
        self.rect.center = pos
        self.anim_frame=0
       
    def update(self):
        self.animame()
    def animame(self):
        strip_path = 'data/scot000%d.png'
        self.anim_frame+=1
        if self.anim_frame>6:
            self.anim_frame=1
       
        self.image, self.rect=load_image(strip_path % self.anim_frame)
        pygame.time.delay(90)
        scr.blit(image_fondo,(0,0))
        pos = pygame.mouse.get_pos()
        scr.blit(self.image,self.rect.center)


pygame.init()

scr=pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('Multiple Sprites')
pygame.display.flip()

fondo=pygame.Surface(scr.get_size())
fondo=fondo.convert()
image_fondo=pygame.image.load('data/fondo.png')
fondo.blit(image_fondo,(0,0))
scr.blit(fondo,(0,0))
pygame.display.flip()

sprites = pygame.sprite.RenderClear()

while True:
   
    for e in pygame.event.get():
        if e.type==pygame.KEYDOWN:
            pygame.quit()
        if e.type==pygame.MOUSEBUTTONDOWN:
            pos = pygame.mouse.get_pos()
            new_hero = GuitarHero(pos)
            sprites.add(new_hero)
            pygame.time.delay(900)
    sprites.update()
    scr.blit(fondo,(0,0))
    sprites.draw(scr)
    pygame.display.flip()       
           


El sprite aparece siempre en el mismo lugar. Si quieren pueden probar poniendo sus propios grupos de imagenes para la animación o borrar la funcion de animación. Sólo me interesa saber que estoy haciendo mal. He creado este proyecto fijandome en el proyecto 'nieve' de Hugo Ruscitti y el 'invaders' de Juan Guerrero.
Vienbeni2 a mi mundo....WAJAJAJAJAJA
yasser_001200
 
Mensajes: 46
Registrado: Lun May 19, 2008 3:28 pm

Re: Tutoriales y Ayudas

Notapor Juanxo » Vie Sep 17, 2010 6:01 pm

buenas yasser

No se cual es tu problema, porque a mi más o menos me funcionaba. Posteo lo que tengo y te comento

Código: Seleccionar todo
class GuitarHero(pygame.sprite.Sprite):
    def __init__(self, pos):
        pygame.sprite.Sprite.__init__(self)
        self.image, self.rect = load_image('mono_grita.png')
        self.rect.center = pos
        self.anim_frame=0
       
    def update(self):
        self.animame()
    def animame(self):
        strip_path = 'data/scot000%d.png'
        self.anim_frame+=1
        if self.anim_frame>6:
            self.anim_frame=1
       
        self.image, self.rect=load_image(strip_path % self.anim_frame)
        #scr.blit(image_fondo,(0,0))
        #scr.blit(self.image,self.rect.center)


Fijate en las dos lineas comentadas. En mi opinion no son correctas por lo siguiente:
* Cuando yo llamo a animame, no espero que me dibujen nada, y menos algo que no tiene nada que ver con el fondo.
* Si te fijas, los spritegroups ya traen métodos para dibujar(draw), asi que con establecer self.image me valdria, ya que como lo tenias dibujaba dos veces la imagen.

Código: Seleccionar todo
while True:
   
    for e in pygame.event.get():
        if e.type==pygame.KEYDOWN:
            pygame.quit()
        if e.type==pygame.MOUSEBUTTONDOWN:
            pos = e.pos
            new_hero = GuitarHero(pos)
            sprites.add(new_hero)
    sprites.update()
    sprites.draw(scr)
    pygame.display.flip()

Si te fijas e cambiado lo de obtener la posición del ratón. Aunque no suponga un cambio drástico, ten en cuenta que cuando yo pulso el ratón, quiero que se dibuje donde pulsé, no donde está en el momento en el que proceso el evento.

Tema aparte: acuérdate de lo que te dijo hugo. No te lo tomes a mal, pero tienes que aprender a buscar este tipo de cosas por ti mismo, básicamente porque:
* Es más rápido que esperar a que te contestemos
* Aprenderás más, ya que de esta forma siempre acabamos dándote la solución

En mi caso, por ejemplo, cada vez que posteas alguna pregunta, tengo que revisar la documentación de pygame, ya que llevo más de un año sin programar en python. Con esto lo que te quiero decir es que en realidad lo que cuenta como "programador" no es que sepas más o menos de esto, sino que sepas como crear soluciones, y sobre todo, como buscarte la información que necesitas, como la documentación de Pygame en este caso
Última edición por Juanxo el Mar Sep 21, 2010 9:57 pm, editado 1 vez en total
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: Tutoriales y Ayudas

Notapor yasser_001200 » Mar Sep 21, 2010 7:41 pm

A lo mejor esta pregunta es un poco tonta o innecesaria, pero quería preguntar si puedo desechar SDL para dedicarme enteramente a pygame. Sé que una es parte de la otra.. es como usar SDL en python. Pero con pygame todo me es más cómodo. ¿Si hago esto no pierdo nada eh?
Vienbeni2 a mi mundo....WAJAJAJAJAJA
yasser_001200
 
Mensajes: 46
Registrado: Lun May 19, 2008 3:28 pm

Re: Tutoriales y Ayudas

Notapor Juanxo » Mar Sep 21, 2010 9:58 pm

no hay problema alguno. De hecho yo seguí esa ruta. Aunque ahora te recomendaría más pySFML (muy parecido a SDL) que me parece mucho mejor que SDL
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)


Volver a Ejemplos

¿Quién está conectado?

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