Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我的PyGame精灵在一个组中没有被绘制-AttributeError:';集团';对象没有属性';blitme';_Python_Pygame - Fatal编程技术网

Python 为什么我的PyGame精灵在一个组中没有被绘制-AttributeError:';集团';对象没有属性';blitme';

Python 为什么我的PyGame精灵在一个组中没有被绘制-AttributeError:';集团';对象没有属性';blitme';,python,pygame,Python,Pygame,我是pygame的初学者,我正在模仿《Python速成课程》一书中的游戏代码“外星人入侵”,编写一个名为“字母动物园”的游戏。在这个游戏中,不同的字母在一段时间后从屏幕顶部落下,当你敲击键盘上相应的键时,字母将消失。每个字母的x位置是随机的,下降速度会随着游戏的进行而加快。游戏将在特定条件下结束(例如屏幕高度被字母占据)。这对我来说似乎是一个巨大的挑战。在第一阶段,我的代码被简化为相同的字母“A”,而不是不同的字母。详情如下: 字母表 设置.py game_functions.py lette

我是pygame的初学者,我正在模仿《Python速成课程》一书中的游戏代码“外星人入侵”,编写一个名为“字母动物园”的游戏。在这个游戏中,不同的字母在一段时间后从屏幕顶部落下,当你敲击键盘上相应的键时,字母将消失。每个字母的x位置是随机的,下降速度会随着游戏的进行而加快。游戏将在特定条件下结束(例如屏幕高度被字母占据)。这对我来说似乎是一个巨大的挑战。在第一阶段,我的代码被简化为相同的字母“A”,而不是不同的字母。详情如下:

  • 字母表
  • 设置.py
  • game_functions.py
  • letter.py
  • 导入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