Foros del Web » Programando para Internet » Python »

problema con pygame.time.wait()

Estas en el tema de problema con pygame.time.wait() en el foro de Python en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 27/04/2010, 13:15
 
Fecha de Ingreso: noviembre-2009
Mensajes: 186
Antigüedad: 14 años, 5 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
  #2 (permalink)  
Antiguo 27/04/2010, 21:52
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: problema con pygame.time.wait()

El error mas bien es de lógica, te recomiendo que cheques la función:

clock.tick() al poner un delay de 1000 milisegundos, clock.tick() retornara 1000 o mas y como eso lo multiplicas para obtener una nueva posición es bastante obvio que el programa no se comporte como tu quieres.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:06.