运行后报错: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()
|