Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/04/2010, 13:15
stiwi222
 
Fecha de Ingreso: noviembre-2009
Mensajes: 186
Antigüedad: 14 años, 6 meses
Puntos: 2
problema con pygame.time.wait()

bueno, he terminado un pong en pygame jugable, pero le he querido meter la opcion de que al marcar un "gol" la mande al centro y espere 3 segundos, pero hace cosas muy raras a la hora de la llamada a pygame.time.wait(), linea 35:
Código python:
Ver original
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. # Módulos
  5. import sys, pygame
  6. from pygame.locals import *
  7.  
  8. # Constantes
  9. WIDTH = 640
  10. HEIGHT = 480
  11.  
  12. # Clases
  13. # ---------------------------------------------------------------------
  14.  
  15. class Bola(pygame.sprite.Sprite):
  16.     def __init__(self):
  17.         pygame.sprite.Sprite.__init__(self)
  18.         self.image = load_image("images/ball.png", True)
  19.         self.rect = self.image.get_rect()
  20.         self.rect.centerx = WIDTH / 2
  21.         self.rect.centery = HEIGHT / 2
  22.         self.speed = [0.5, -0.3]
  23.  
  24.     def actualizar(self, time, pala_jug, pala_cpu, puntos):
  25.         self.rect.centerx += self.speed[0] * time
  26.         self.rect.centery += self.speed[1] * time
  27.  
  28.         if self.rect.left <= 0:
  29.                     puntos[1] += 1
  30.         if self.rect.right >= WIDTH:
  31.                     puntos[0] += 1
  32.         if self.rect.left <= 0 or self.rect.right >= WIDTH:
  33.             self.speed[0] = -self.speed[0]
  34.             self.rect.centerx = WIDTH / 2
  35.             pygame.time.delay(1000) #el problema es este
  36.         if self.rect.top <= 0 or self.rect.bottom >= HEIGHT:
  37.             self.speed[1] = -self.speed[1]
  38.             self.rect.centery += self.speed[1] * time
  39.  
  40.         if pygame.sprite.collide_rect(self, pala_jug):
  41.             self.speed[0] = -self.speed[0]
  42.             self.rect.centerx += self.speed[0] * time
  43.  
  44.  
  45.         if pygame.sprite.collide_rect(self, pala_cpu):
  46.             self.speed[0] = -self.speed[0]
  47.             self.rect.centerx += self.speed[0] * time
  48.  
  49.  
  50.         return puntos  
  51.  
  52. class Pala(pygame.sprite.Sprite):
  53.     def __init__(self, x):
  54.         pygame.sprite.Sprite.__init__(self)
  55.         self.image = load_image("images/pala.png")
  56.         self.rect = self.image.get_rect()
  57.         self.rect.centerx = x
  58.         self.rect.centery = HEIGHT / 2
  59.         self.speed = 0.5
  60.  
  61.     def mover(self, time, keys):
  62.         if self.rect.top >= 0:
  63.             if keys[K_UP]:
  64.                 self.rect.centery -= self.speed * time
  65.         if self.rect.bottom <= HEIGHT:
  66.             if keys[K_DOWN]:
  67.                 self.rect.centery += self.speed * time
  68.  
  69.     def ia(self, time, ball):
  70.         if ball.speed[0] >= 0 and ball.rect.centerx >= WIDTH/2:
  71.             if self.rect.centery < ball.rect.centery:
  72.                 self.rect.centery += self.speed * time
  73.             if self.rect.centery > ball.rect.centery:
  74.                 self.rect.centery -= self.speed * time
  75.  
  76. # ---------------------------------------------------------------------
  77.  
  78. # Funciones
  79. # ---------------------------------------------------------------------
  80.  
  81. def load_image(filename, transparent=False):
  82.         try: image = pygame.image.load(filename)
  83.         except pygame.error, message:
  84.                 raise SystemExit, message
  85.         image = image.convert()
  86.         if transparent:
  87.                 color = image.get_at((0,0))
  88.                 image.set_colorkey(color, RLEACCEL)
  89.         return image
  90.  
  91. def texto(texto, posx, posy, color=(255,255,255)):
  92.     fuente = pygame.font.Font("images/DroidSans.ttf", 25)
  93.     salida = pygame.font.Font.render(fuente, texto, 1, color)
  94.     salida_rect = salida.get_rect()
  95.     salida_rect.centerx = posx
  96.     salida_rect.centery = posy
  97.     return salida, salida_rect
  98. # ---------------------------------------------------------------------
  99.  
  100. def main():
  101.     screen = pygame.display.set_mode((WIDTH, HEIGHT))
  102.     pygame.display.set_caption("Pruebas Pygame")
  103.  
  104.     background_image = load_image('images/fondo_pong.png')
  105.     bola = Bola()
  106.     pala_jug = Pala(30)
  107.     pala_cpu = Pala(WIDTH - 30)
  108.     puntos = [0, 0]
  109.  
  110.     clock = pygame.time.Clock()
  111.  
  112.     while True:
  113.         time = clock.tick(60)
  114.         keys = pygame.key.get_pressed()
  115.         for eventos in pygame.event.get():
  116.             if eventos.type == QUIT:
  117.                 sys.exit(0)
  118.  
  119.         puntos = bola.actualizar(time, pala_jug, pala_cpu, puntos)
  120.         p_jug, p_jug_rect = texto(str(puntos[0]), WIDTH/4, 40)
  121.         p_cpu, p_cpu_rect = texto(str(puntos[1]), WIDTH-WIDTH/4, 40)
  122.         pala_jug.mover(time, keys)
  123.         pala_cpu.speed = 0.2
  124.         pala_cpu.ia(time, bola)
  125.         screen.blit(background_image, (0, 0))
  126.         screen.blit(p_jug, p_jug_rect)
  127.         screen.blit(p_cpu, p_cpu_rect)
  128.         screen.blit(bola.image, bola.rect)
  129.         screen.blit(pala_jug.image, pala_jug.rect)
  130.         screen.blit(pala_cpu.image, pala_cpu.rect)
  131.         pygame.display.flip()
  132.        
  133.     return 0
  134.  
  135. if __name__ == '__main__':
  136.     pygame.init()
  137.     main()
se pone a marcar puntos sin sentido y a desaparecer las palas, y no se por que...

por cierto, el link a la documentacion de esta funcion de pygame es este