Python出现属性错误(Attributeerror)的原因之一

检查类中构造函数__init__()是否写正确,左右两边各两条下划线

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
这段代码存在一些问题,比如: 1. 在 Base 类中,没有实现对速度的限制,可能导致物体移动过快或过慢。 2. 在 Background 类中,没有考虑到循环播放背景图片的情况,会导致背景图片移动到屏幕底部后出现空白区域。 3. 在 main 函数中,调用了一个名为 a 的变量的 show 方法,但是 a 并不是一个对象,会导致 AttributeError 错误。 下面是修改后的代码: ```python import random import time import pygame from pygame.constants import * from pygame.image import load as addimage class Base(object): def __init__(self, image, x, y, screen): self.x = x self.y = y self.image = image self.screen = screen self.speedx = 0 self.speedy = 0 self.max_speed = 10 # 设置最大速度 def draw(self): self.screen.blit(self.image, (self.x, self.y)) def changespeed(self, x, y): if abs(self.speedx + x) < self.max_speed: # 控制速度不超过最大速度 self.speedx += x if abs(self.speedy + y) < self.max_speed: self.speedy += y def changespeedx(self, x): if abs(self.speedx + x) < self.max_speed: self.speedx += x def changespeedy(self, y): if abs(self.speedy + y) < self.max_speed: self.speedy += y def move(self): self.x += self.speedx self.y += self.speedy class Background(): def __init__(self): pygame.display.set_caption("Plane War Game") self.image1 = Base(addimage('./images/bg1.png'), 0, -1200) self.image2 = Base(addimage('./images/bg2.png'), 0, -600) self.image3 = Base(addimage('./images/bg3.png'), 0, 0) self.bgs = [] self.bgs.append(self.image1) self.bgs.append(self.image2) self.bgs.append(self.image3) self.speedy = 3 for bg in self.bgs: bg.changespeedy(self.speedy) def show(self): for bg in self.bgs: bg.move() bg.draw() if bg.y > 1800: # 判断是否到达屏幕底部 bg.y = self.bgs[self.bgs.index(bg)-1].y - 600 # 计算下一张图片的位置 def main(): maxsize = (800, 600) screen = pygame.display.set_mode(maxsize) bg = Background() # 实例化 Background 类 while True: bg.show() # 调用 Background 类的 show 方法 pygame.display.update() time.sleep(0.03) if __name__ == '__main__': main() ``` 修改后的代码增加了对速度的限制,使得物体移动更加平稳;在 Background 类中新增了循环播放背景图片的功能,避免了出现空白区域的问题;在 main 函数中,创建了 Background 类的实例,并调用其 show 方法来播放背景图片。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值