|
发表于 2023-8-5 18:42:20
|
显示全部楼层
运行后报错:
- Traceback (most recent call last):
- File "D:\1.py", line 74, in <module>
- ditu()
- File "D:\1.py", line 43, in ditu
- if Bird.dead:
- AttributeError: type object 'Bird' has no attribute 'dead'
复制代码
所以才会一闪而过。
错误原因:
self.birdrect = pygame.Rect(65, 50, 50, 50) # 鸟的矩形
self.birdStatus = [pygame.image.load('niao.png'), pygame.image.load('niao.png'), pygame.image.load('niao.png')]
self.status = 0# 默认飞行状态
self.birdX = 120# 鸟所在 X 轴坐标
self.birdY = 350# 鸟所在 Y 轴坐标, 及上下飞行高度
self.jump = False# 默认情况下小鸟自动降落
self.jumpspeed = 10# 跳跃高度
self.gravity = 5# 重力
self.dead = False# 默认小鸟生命状态为活着
这些实例属性只有通过实例bird才能调用,而在你的程序里你尝试用Bird类直接调用。
修改后的程序:
- import sys
- import pygame
- import random
- class Bird(object):
- '''定义一个鸟类'''
- def __init__(self):
- '''定义初始化方法'''
- self.birdrect = pygame.Rect(65, 50, 50, 50) # 鸟的矩形
- # 定义鸟的3种状态列表
- self.birdStatus = [pygame.image.load('niao.png'), pygame.image.load('niao.png'), pygame.image.load('niao.png')]
- self.status = 0 # 默认飞行状态
- self.birdX = 120 # 鸟所在 X 轴坐标
- self.birdY = 350 # 鸟所在 Y 轴坐标, 及上下飞行高度
- self.jump = False # 默认情况下小鸟自动降落
- self.jumpspeed = 10 # 跳跃高度
- self.gravity = 5 # 重力
- self.dead = False # 默认小鸟生命状态为活着
- def bird_update(self):
- if self.jump:
- self.jumpspeed -= 1 # 速度递减 上升越来越慢
- self.birdY -= self.jumpspeed # 鸟 Y 轴坐标减小 小鸟上升
- else:
- # 小鸟坠落
- self.gravity += 0.2 # 重力递增,下降越来越快
- self.birdY += self.gravity # 鸟 Y 轴坐标增加 小鸟下降
- self.birdrect[1] = self.birdY # 更改 Y 轴位置
- class Guandao(object):
- '''定义一个管道类'''
- def __init__(self):
- '''定义初始化方法'''
- pass
- def updateGuandao(self):
- '''水平移动'''
- pass
- def ditu():
- '''定义创建地图的方法'''
- screen.fill((255, 255, 255)) # 填充颜色
- screen.blit(background, (0, 0)) # 填入到背景
- # 显示小鸟
- if bird.dead:
- bird.status = 2
- elif bird.jump: # 起飞状态
- bird.status = 1
- screen.blit(bird.birdStatus[bird.status], (bird.birdX, bird.birdY)) # 设置小鸟的坐标
- bird.bird_update() # 鸟移动
- pygame.display.update() # 更新显示
- if __name__ == '__main__':
- '''主程序'''
- pygame.init() # 初始化 pygame
- size = width, height = 400, 680 # 设置窗口大小
- screen = pygame.display.set_mode(size) # 显示窗口
- clock = pygame.time.Clock() # 设置时钟
- guandao = Guandao() # 实例化管道
- bird = Bird() # 实例化鸟
-
- # 执行死循环,确保窗口一直显示
- while True:
- clock.tick(60)
- # 轮询事件
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- pygame.quit()
- sys.exit()
- if (event.type == pygame.KEYDOWN or event.type == pygame.MOUSEBUTTONDOWN) and not bird.dead:
- bird.jump = True # 跳跃
- bird.gravity = 5 # 重力
- bird.jumpspeed = 10 # 跳跃速度
- background = pygame.image.load('女孩.jpg')
- ditu()
复制代码 |
|