白衣不争 2020-02-08 14:00 采纳率: 100%
浏览 2675
已采纳

新人使用pycharm运行飞机大战项目报如下错误:AttributeError: module 'pygame.image' has no attribute 'get_rect'

看着网上的教学视频一步一步下来,当建立敌机的精灵后,在程序中调用这个精灵时就会报错,单独运行精灵程序时不会报错,在网上也找了相关的资料,但类似的好像也不对;

主程序代码如下:

import pygame
from plane_sprites import *

pygame.init()

#创建游戏窗口 480*700
screen = pygame.display.set_mode((480,700))

#绘制背景图像
bg = pygame.image.load("./images/background.png")
screen.blit(bg,(0,0))

#绘制英雄的飞机
hero = pygame.image.load("./images/me1.png")
screen.blit(hero,(150,400))

#可以在所有绘制工作结束后,统一调度update方法啊
pygame.display.update()

#创建时钟对象
clock = pygame.time.Clock()

#1.定义rect记录飞机的初始位置
hero_rect = pygame.Rect(150,400,102,126)

#创建敌机的精灵
enemy = GameSprite("./images/enemy1.png")
enemy1 = GameSprite("./images/enemy1.png",2)
#创建敌机的精灵组
enemy_group = pygame.sprite.Group(enemy,enemy1)

#游戏循环>意味着游戏正式开始
while True:
    #1.可以指定循环体内部的代码执行的频率
    clock.tick(60)
    """
    #捕获事件
    event_list = pygame.event.get()
    if len(event_list) > 0:
        print(event_list)
    """
    #事件监听
    for event in pygame.event.get():

        #判断用户是否点击了关闭按钮
        if event.type == pygame.QUIT:
            print('退出游戏!')

            pygame.quit()

            #直接退出系统
            exit()

    #2.修改飞机的位置
    hero_rect.y -= 1

    #判读飞机的位置
    if hero_rect.y <= -126:
        hero_rect.y = 700

    #3.调用blit方法绘制图像
    screen.blit(bg,(0,0))
    screen.blit(hero,hero_rect)

    #让精灵族调用两个方法
    #update - 让组中的所有精灵都更新位置
    enemy_group.update()

    #draw - 在screen上显示所有的精灵
    enemy_group.draw(screen)

    #4.使用update方法更新显示
    pygame.display.update()

pygame.quit()

调用的精灵程序如下:

import pygame

class GameSprite(pygame.sprite.Sprite):
    """飞机大战精灵"""

    def __init__(self, image_name, speed=1):

        #调用父类的初始化方法
        super().__init__()

        #定义对象的属性
        self.image = pygame.image.load(image_name)
        self.rect = pygame.image.get_rect()
        self.speed = speed

    def update(self):

        #在屏幕的垂直方向移动
        self.rect.y += self.speed

运行后报如下的错误:
AttributeError: module 'pygame.image' has no attribute 'get_rect'

图片说明

还请各位大佬有时间能帮忙看下这个问题我出错在哪里了,谢谢哈

  • 写回答

1条回答

  • 代码的灵魂是bug! 2020-02-08 14:11
    关注

    self.rect = pygame.image.get_rect()
    改成
    self.rect = self.image.get_rect()

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置