Python 为什么我的PyGame精灵在一个组中没有被绘制-AttributeError:';集团';对象没有属性';blitme';
我是pygame的初学者,我正在模仿《Python速成课程》一书中的游戏代码“外星人入侵”,编写一个名为“字母动物园”的游戏。在这个游戏中,不同的字母在一段时间后从屏幕顶部落下,当你敲击键盘上相应的键时,字母将消失。每个字母的x位置是随机的,下降速度会随着游戏的进行而加快。游戏将在特定条件下结束(例如屏幕高度被字母占据)。这对我来说似乎是一个巨大的挑战。在第一阶段,我的代码被简化为相同的字母“A”,而不是不同的字母。详情如下:Python 为什么我的PyGame精灵在一个组中没有被绘制-AttributeError:';集团';对象没有属性';blitme';,python,pygame,Python,Pygame,我是pygame的初学者,我正在模仿《Python速成课程》一书中的游戏代码“外星人入侵”,编写一个名为“字母动物园”的游戏。在这个游戏中,不同的字母在一段时间后从屏幕顶部落下,当你敲击键盘上相应的键时,字母将消失。每个字母的x位置是随机的,下降速度会随着游戏的进行而加快。游戏将在特定条件下结束(例如屏幕高度被字母占据)。这对我来说似乎是一个巨大的挑战。在第一阶段,我的代码被简化为相同的字母“A”,而不是不同的字母。详情如下: 字母表 设置.py game_functions.py lette
导入pygame
随机输入
从pygame.sprite导入sprite
班级字母(精灵):
def u u初始(自身、az u设置、屏幕):
super()。\uuuu init\uuuuu()
self.screen=屏幕
self.az_设置=az_设置
self.image=pygame.image.load('images/A.png')
self.rect=self.image.get_rect()
self.screen\u rect=screen.get\u rect()
self.rect.centerx=random.randint(0,self.screen_rect.right)
self.rect.top=self.screen\u rect.top
self.center=float(self.rect.centerx)
def blitme(自):
self.screen.blit(self.image,self.rect)
def更新(自我):
如果self.rect.bottom
我想我应该在代码中使用sprite。不幸的是,程序在运行后提示“AttributeError:“Group”对象没有属性“blitme”。如果您能帮我解决这个问题,我将不胜感激。中不存在
blitme
方法。不能对不存在的对象调用方法。但是您根本不需要blitme
。您所要做的就是调用:
将包含的精灵绘制到曲面参数。这将使用源曲面的Sprite.image
属性和位置的Sprite.rect
例如:
letters.draw()
和是pygame.sprite.Group提供的方法
前者将任务委托给所包含的update
方法—您必须实现该方法。见:
对组[…]中的所有精灵调用update()
方法
后者使用包含的pygame.sprite.sprite
s的image
和rect
属性来绘制对象-您必须确保pygame.sprite.sprite
s具有所需的属性。见:
将包含的精灵绘制到曲面参数。这将使用源曲面的Sprite.image
属性和Sprite.rect
。[……]
谢谢你,但是我对如何更正代码感到困惑。我按照你的建议做了,而且效果很好。非常感谢。
import sys
import pygame
from pygame.locals import *
from settings import Settings
from letter import Letter
import game_functions as gf
from pygame.sprite import Group
def run_game():
pygame.init()
az_settings =Settings()
screen = pygame.display.set_mode((0,0), RESIZABLE)
pygame.display.set_caption("Alphabet Zoo")
letter = Letter(az_settings, screen)
letters = Group()
while True:
gf.check_events(az_settings, screen, letters)
letters.update()
gf.update_screen(az_settings, screen, letters)
run_game()
class Settings():
def __init__(self):
self.bg_color = (0, 0, 0)
self.letter_speed_factor = 10.5
import sys
import pygame
from letter import Letter
def letter_generator(az_settings, screen, letters, lag_time):
new_letter = Letter(az_settings, screen)
letters.add(new_letter)
def check_events(az_settings, screen, letters):
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
print('a')
def update_screen(az_settings, screen, letters):
screen.fill(az_settings.bg_color)
letters.blitme()
letters.update()
pygame.display.flip()
import pygame
import random
from pygame.sprite import Sprite
class Letter(Sprite):
def __init__(self, az_settings, screen):
super().__init__()
self.screen = screen
self.az_settings = az_settings
self.image = pygame.image.load('images/A.png')
self.rect = self.image.get_rect()
self.screen_rect = screen.get_rect()
self.rect.centerx = random.randint(0, self.screen_rect.right)
self.rect.top = self.screen_rect.top
self.center = float(self.rect.centerx)
def blitme(self):
self.screen.blit(self.image, self.rect)
def update(self):
if self.rect.bottom < self.screen_rect.bottom:
self.rect.centery += self.az_settings.letter_speed_factor