【问题标题】:Sprites aren't appearing精灵没有出现
【发布时间】:2014-06-24 03:29:15
【问题描述】:

我的精灵(令牌)没有出现在屏幕上。我包含了我所有的代码,以防代码主体中的某些东西搞砸了。我将与令牌精灵直接相关的代码加上星号。代码的要点是:屏幕上出现三个块,现在我试图让 11、15 或 21 个标记(橙色 20x20 像素正方形)出现在中间圆圈中。他们没有出现。忽略有关箭头键的代码,因为这是以后的事情。我的首要任务是让精灵出现,但如果您对加快或更好地组织我的代码有任何建议,我很乐意听到!谢谢。

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)

【问题讨论】:

    标签: python class pygame subclass sprite


    【解决方案1】:

    您将精灵添加到token_list 精灵组,但您从未实际绘制它们。

    最简单的方法是在更新屏幕之前调用token_list.draw(screen)

    此外,您的事件处理也搞砸了。例如。如果您已经捕捉到KEYDOWN 事件,则无需使用pygame.key.get_pressed() 获取所有按下的键。只需检查event.key 中的K_LEFTK_RIGHT

    【讨论】:

      猜你喜欢
      • 2014-06-20
      • 1970-01-01
      • 2013-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多