2014-06-24 6 views
0

Mes sprites (jetons) n'apparaissent pas à l'écran. J'ai inclus tout mon code en cas d'incident dans le corps du code. J'ai mis dans les étoiles le code qui avait directement à voir avec les sprites des jetons. L'essentiel du code est: trois blocs apparaissent à l'écran, et en ce moment j'essaie de faire apparaître 11, 15 ou 21 jetons (carrés oranges de 20x20 pixels) répartis dans le cercle du milieu. Ils ne se présentent pas. Ignorez le code sur les touches fléchées pour plus tard. Ma première priorité est de faire apparaître les sprites, mais si vous avez des suggestions pour accélérer ou mieux organiser mon code, j'aimerais l'entendre! Merci.Les sprites n'apparaissent pas

import pygame, sys 
from pygame.locals import * 
import pygame 
import time 
import random 

pygame.init() 

screen = pygame.display.set_mode((720, 480)) 

gray = pygame.Color(220, 220, 220) 
black = pygame.Color(0, 0, 0) 
blue = pygame.Color(0, 0, 255) 
red = pygame.Color(255, 0 ,0) 
white = pygame.Color(255, 255, 255) 


t_end = time.time() + 60*15 

g=0 

f = open("results", "a") 
f.write("trial number, answer, reaction time, correct answer, number of balls in left circle at response, number of balls in middle circle at response, number of balls in right circle at response\n") 
f.close() 

**class tokens(pygame.sprite.Sprite): 
    def __init__(self, color, width, height): 
     pygame.sprite.Sprite.__init__(self) 

     self.image = pygame.Surface([width, height]) 
     self.image.fill(color) 

     self.rect = self.image.get_rect() 

token_list = pygame.sprite.Group()** 

while time.time() < t_end: 
    screen.fill(gray) 
    pygame.draw.rect(screen, black, Rect((30,140), (200,200))) 
    pygame.draw.rect(screen, black, Rect((260,140), (200,200))) 
    pygame.draw.rect(screen, black, Rect((490,140), (200,200))) 
    pygame.display.update() 

    **n = random.randint(1,3) 
    if n == 1: 
     n=11 
    elif n == 2: 
     n = 15 
    elif n == 3: 
     n = 21 

    x_coords = [35, 75, 115, 155, 195, 35, 75, 115, 155, 195, 35, 75, 115, 155, 195, 35, 75, 115, 155, 195] 

    y_coords = [170, 170, 170, 170, 170, 210, 210, 210, 210, 210, 250, 250, 250, 250, 250, 290, 290, 290, 290, 290] 


    for i in range(0,n): 
     token = tokens((255,120,0), 20, 20) 
     token.rect.x = x_coords[i-1] 
     token.rect.y = y_coords[i-1] 

     token_list.add(token)** 

    for event in pygame.event.get(): 
     if event.type == KEYDOWN: 
      g+=1 
      keys = pygame.key.get_pressed() 
      if keys[pygame.K_LEFT]: 
       answer = "left" 
       f = open("results", "a") 
       f.write(str(g) + ", left\n") 
       f.close() 
       pygame.draw.rect(screen, blue, Rect((30,140), (200,200))) 
       print("You picked left!") 
       pygame.display.update() 
       time.sleep(1) 
       screen.fill(black) 
       pygame.display.update() 
       time.sleep(1) 

      elif keys[pygame.K_RIGHT]: 
       answer = "right" 
       f = open("results", "a") 
       f.write(str(g) + ", right\n") 
       f.close() 
       pygame.draw.rect(screen, blue, Rect((490,140), (200,200))) 
       print("You picked right!") 
       pygame.display.update() 
       time.sleep(1) 
       screen.fill(black) 
       pygame.display.update() 
       time.sleep(1) 

Répondre

0

Vous ajoutez les sprites au groupe de sprite token_list, mais vous jamais réellement les dessiner sur. Le moyen le plus simple est d'appeler simplement token_list.draw(screen) avant de mettre à jour l'écran.

En outre, votre gestion des événements est fautive. Par exemple. il n'est pas nécessaire d'avoir toutes les touches enfoncées avec pygame.key.get_pressed() si vous avez déjà attrapé l'événement KEYDOWN. Vérifiez simplement event.key pour K_LEFT ou K_RIGHT.

Questions connexes