pygame 为什么会多一块黑屏出来?

明月别枝惊鹊丶 2023-10-31 14:33:32

 

import sys
import time
import random

import pygame
from pygame.locals import *

# 常量
# 背景 background路径、大小、位置
BACKGROUND_PATH = ['images/start/startBg.jpg', 'images/bg/bg1.jpg']
BACKGROUND_SIZE = WIDTH, HEIGHT = 500, 700
BACKGROUND_COORDINATE = BACKGROUND_X, BACKGROUND_Y = 0, 0
# 开始按钮 startButton路径、大小、位置
START_BUTTON_PATH = 'images/start/startButton.png'
START_BUTTON_SIZE = START_BUTTON_WIDTH, START_BUTTON_HEIGHT = 200, 100
START_BUTTON_COORDINATE = START_BUTTON_X, START_BUTTON_Y = (WIDTH - START_BUTTON_WIDTH) / 2, HEIGHT / 2
# 简介 rules路径、大小、位置
RULES_PATH = 'images/start/rules.png'
RULES_SIZE = RULES_WIDTH, RULES_HEIGHT = 200, 100
RULES_COORDINATE = RULES_X, RULES_Y = (WIDTH - RULES_WIDTH) / 2, START_BUTTON_Y + RULES_HEIGHT + 20
# 我机 myAircraft路径、大小、位置、速度
MY_AIRCRAFT_PATH = 'images/my/own0.png'
MY_AIRCRAFT_SIZE = MY_AIRCRAFT_WIDTH, MY_AIRCRAFT_HEIGHT = 80, 80
MY_AIRCRAFT_COORDINATE = MY_AIRCRAFT_X, MY_AIRCRAFT_Y = (WIDTH - MY_AIRCRAFT_WIDTH) / 2, HEIGHT - MY_AIRCRAFT_HEIGHT
MY_AIRCRAFT_SPEED = 5
# 子弹 Bullet路径、大小、位置、速度
BULLET_PATH = ['images/fire/fire1.png', 'images/fire/fire2.png', 'images/fire/fire3.png',
               'images/fire/fire4.png', 'images/fire/fire5.png', 'images/fire/fire6.png', 'images/fire/fire7.png']
BULLET_SIZE = BULLET_WIDTH, BULLET_HEIGHT = 30, 30
# BULLET_COORDINATE = BULLET_X, BULLET_Y = 0,0
BULLET_SPEED = 5

TITLE = '飞机大战1.0'


# 方法
def imageSet(path, size):
    return pygame.transform.scale(pygame.image.load(path), size)


def hello():
    startBG = imageSet(BACKGROUND_PATH[0], BACKGROUND_SIZE)
    screen.blit(startBG, (0, 0))
    startButton = imageSet(START_BUTTON_PATH, START_BUTTON_SIZE)
    screen.blit(startButton, START_BUTTON_COORDINATE)
    rules = imageSet(RULES_PATH, RULES_SIZE)
    screen.blit(rules, RULES_COORDINATE)


def gaming():
    # screen.fill((255, 255, 255))  # 填充颜色
    # 加载背景
    startBG = imageSet(BACKGROUND_PATH[1], BACKGROUND_SIZE)
    screen.blit(startBG, (0, 0))
    myAircraftImg = imageSet(MY_AIRCRAFT_PATH, MY_AIRCRAFT_SIZE)
    screen.blit(myAircraftImg, myAircraft.myAircraftRect)

    pygame.display.update()  # 更新显示


def gameOver():
    pass


# 类
# 子弹
class Bullet:
    def __init__(self, path, coordinate):
        self.bulletImg = imageSet(BULLET_PATH[path], BULLET_SIZE)
        # 位置
        self.bulletCoordinate = self.bullet_X, self.bullet_Y = coordinate
        # 移动速度
        self.speed = BULLET_SPEED
        # Rect
        self.bulletRect = pygame.Rect(self.bullet_X, self.bullet_Y, BULLET_WIDTH, BULLET_HEIGHT)
        self.bulletSurface = self.bulletImg.subsurface(self.bulletRect)

    def move(self):
        self.bulletRect[1] -= self.speed


# 飞机
class MyAircraft:
    def __init__(self):
        # 图像
        self.myAircraftImg = imageSet(MY_AIRCRAFT_PATH, MY_AIRCRAFT_SIZE)
        # 位置
        self.myAircraftCoordinate = self.myAircraft_X, self.myAircraft_Y = MY_AIRCRAFT_X, MY_AIRCRAFT_Y
        # 移动速度
        self.speed = MY_AIRCRAFT_SPEED
        # 状态
        self.death = False
        # Rect
        #self.myAircraftRect = pygame.Rect(self.myAircraft_X, self.myAircraft_Y, MY_AIRCRAFT_WIDTH, MY_AIRCRAFT_HEIGHT)
        self.myAircraftRect=self.myAircraftImg.get_rect()
        self.myAircraftSurface = self.myAircraftImg.subsurface(self.myAircraftRect)
        self.myAircraftRect.top=self.myAircraft_X
        self.myAircraftRect.left=self.myAircraft_Y
        # 子弹是由玩家飞机发射的,所以创建列表,存储子弹对象,使该列表变为该类的属性
        self.bullets = []  # 子弹空列表

    #  生成函数,完成发射子弹动作,同时将每个子弹对象存在列表中 bullet_path 0-6
    def shooting(self, bullet_path=0):
        bullet = Bullet(bullet_path, self.myAircraftRect)
        self.bullets.append(bullet)  # 加入子弹列表

    def myAircraftFlyCheck(self):
        if event.type == pygame.KEYDOWN and not self.death:
            # 定义向上移动方法,当飞机移动到边框位置时,无法移动
            if event.key == pygame.K_UP or event.key == pygame.K_w:
                if self.myAircraftRect[1] <= 0:
                    self.myAircraftRect[1] = 0
                else:
                    self.myAircraftRect[1] -= self.speed
            # 定义向下移动方法,当飞机移动到边框位置时,无法移动
            if event.key == pygame.K_DOWN or event.key == pygame.K_s:
                if self.myAircraftRect[1] >= HEIGHT - MY_AIRCRAFT_HEIGHT:
                    self.myAircraftRect[1] = HEIGHT - MY_AIRCRAFT_HEIGHT
                else:
                    self.myAircraftRect[1] += self.speed
            # 定义向左移动方法,当飞机移动到边框位置时,无法移动
            if event.key == pygame.K_LEFT or event.key == pygame.K_a:
                if self.myAircraftRect[0] <= 0:
                    self.myAircraftRect[0] = 0
                else:
                    self.myAircraftRect[0] -= self.speed
            # 定义向右移动方法,当飞机移动到边框位置时,无法移动
            if event.key == pygame.K_RIGHT or event.key == pygame.K_d:
                if self.myAircraftRect[0] >= WIDTH - MY_AIRCRAFT_WIDTH:
                    self.myAircraftRect[0] = WIDTH - MY_AIRCRAFT_WIDTH
                else:
                    self.myAircraftRect[0] += self.speed


# 敌机
class EnemyAircraft:
    pass


# 初始化
pygame.init()
myAircraft = MyAircraft()
enemyAircraft = EnemyAircraft()
# 设置屏幕
screen = pygame.display.set_mode(BACKGROUND_SIZE)
pygame.display.set_caption(TITLE)
# 静态效果
##设置图片
# startBG = imageSet(BACKGROUND_PATH[1], BACKGROUND_SIZE)
# screen.blit(startBG, (0, 0))


# 设置时钟实例
clock = pygame.time.Clock()
# 进行时
# 固定代码段,实现点击"X"号退出界面的功能,几乎所有的pygame都会使用该段代码
while True:
    # 刷新频率
    clock.tick(60)
    # 循环获取事件,监听事件状态
    for event in pygame.event.get():

        # 判断用户是否点了"X"关闭按钮,并执行if代码段
        if event.type == pygame.QUIT:
            # 卸载所有模块
            pygame.quit()
            # 终止程序,确保退出程序
            sys.exit()

    # gaming()
    # myAircraft.myAircraftFlyCheck()
    hello()

    pygame.display.flip()  # 更新屏幕内容

 

...全文
24 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

已解决,在另外的py文件中写了不同的屏幕大小,导致出现了这个问题

5,504

社区成员

发帖
与我相关
我的任务
社区描述
人生苦短,我用python
社区管理员
  • Python 学习者
  • 嗨学编程
  • 松鼠爱吃饼干
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

欢迎来到Python学习者们的社区,

 

本社区分享你需要的文章、问题解答、技术互助、学习资源、面试系列等等

 

欢迎你的加入,祝你学有所成~

试试用AI创作助手写篇文章吧