我收到一个错误,参数 1 必须是 pygame.Surface,而不是 None。我该如何解决这个问题[关闭]

2024-01-04

我正在关注 YouTube 上的代码教程,由于某种原因,我的代码无法执行,因为它生成了此错误代码。请帮忙,谢谢。

回溯(最近一次调用最后一次): 文件“H:\Year 12 ict\game project\space game booster WORKING.py”,第 194 行,位于 主要的() 文件“H:\Year 12 ict\game project\space game booster WORKING.py”,第 192 行,位于 main 中 重画窗口() 文件“H:\Year 12 ict\game project\space game booster WORKING.py”,第 144 行,位于 redraw_window 中 敌人.绘制(窗口) 文件“H:\Year 12 ict\game project\space game booster WORKING.py”,第 81 行,绘制中 window.blit(self.player_img, (self.x, self.y)) TypeError:参数 1 必须是 pygame.Surface,而不是 None

代码是:

import pygame
import os
import random
import time
pygame.font.init()

pygame.init()

pygame.mixer.music.load(os.path.join("assets", 
"BackgroundMusic.mp3"))

#游戏窗口

WIDTH, HEIGHT = 500,500
WINDOW = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Shootergame")

#Player player
PLAYER_SPACE_SHIP = pygame.image.load(os.path.join("assets", "pixel_ship_player.png"))

#Enemy players
EMS_1 = pygame.image.load(os.path.join("assets", "space_enemy_1R.png"))
EMS_2 = pygame.image.load(os.path.join("assets", "space_enemy_2R.png"))
EMS_3 = pygame.image.load(os.path.join("assets", "space_enemy_3R.png"))
EMS_4 = pygame.image.load(os.path.join("assets", "space_enemy_4R.png"))

#Asteroids
ASTEROID_1 = pygame.image.load(os.path.join("assets", "asteroid_1R.png"))
ASTEROID_2 = pygame.image.load(os.path.join("assets", "asteroid_2R.png"))
ASTEROID_3 = pygame.image.load(os.path.join("assets", "asteroid_3R.png"))

#Boss 
BOSS = pygame.image.load(os.path.join("assets", "bossR.png"))

#Lasers
RED_LZ = pygame.image.load(os.path.join("assets", "red_laserR.png"))
GREEN_LZ = pygame.image.load(os.path.join("assets", "green_laserR.png"))
BLUE_LZ = pygame.image.load(os.path.join("assets", "blue_laserR.png"))
PURPLE_LZ = pygame.image.load(os.path.join("assets", "purple_laserR.png"))

BACKGROUND = pygame.transform.scale(pygame.image.load(os.path.join("assets", "bg.png")), (WIDTH,HEIGHT))
boost = False
boost_speed = 8

def score_write():
        d = shelve.open('score.txt','w')
        d['score'] = score
        d.close()

def score_read():
        d = shelve.open('score.txt')
        score = d['score']
        d.close()

def score_multiply():
        if time <= 50:
            score = score*10
        if time <= 100 and time > 50:
            score = score*5
        if time <= 150 and time > 100:
            score = score*3
        if time <= 200 and time > 150:
            score = score*2
        if time > 200:
            score = score



class ship:
    def __init__(self, x,y, health=100):
        self.x = 220
        self.y = 450
        self.health = health
        self.player_img = None
        self.laser_img = None
        self.lasers = []
        self.cool_down = 0

    def draw(self, window):
        window.blit(self.player_img, (self.x, self.y))

    def get_width(self):
        return self.player_img.get_width()

    def get_height(self):
        return self.player_img.get_height()

class Player(ship):
    def __init__(self, x, y, health=100):
        super().__init__(x,y, health)
        self.player_img = PLAYER_SPACE_SHIP
        self.laser_img = RED_LZ
        self.mask =     pygame.mask.from_surface(self.player_img)
        self.max_health = health

class Em(ship):
    COLOUR_MAP = {
                 "red": (EMS_1, RED_LZ),
                 "green": (EMS_2, GREEN_LZ),
                 "purple": (EMS_3, PURPLE_LZ),
                 "blue": (EMS_4, BLUE_LZ)
                 }
    def __init__(self, x, y, colour, health=100):
        super().__init__(x, y, health)
        self.ship_img, self.laser_img =     self.COLOUR_MAP[colour]
        self.mask = pygame.mask.from_surface(self.ship_img)

    def move(self,vel):
        self.y += vel
    

def main():

run = True
FPS = 60
level = 1
hp = 2
boostspeed = 4
player_vel = 3
boost = player_vel + 5
main_font = pygame.font.SysFont("comicsans", 40)
clock = pygame.time.Clock()
pygame.mixer.music.play(loops=-1)

enemies = []
wave_length = 5
enemy_vel = 1

boost = 10

player = Player(300,650)

def redraw_window():
    WINDOW.blit(BACKGROUND, (0,0))

    hp_label = main_font.render(f"HP: {hp}", 1, (255,255,255))
    level_label = main_font.render(f"Level: {level} ", 1, (255,255,255))

    WINDOW.blit(hp_label, (10, 10))
    WINDOW.blit(level_label, (WIDTH - level_label.get_width() - 10,10))

    for enemy in enemies:
            enemy.draw(WINDOW)

    player.draw(WINDOW)

    
    pygame.display.update()
    
    
while run:
    clock.tick(FPS)

    if len(enemies) == 0:
            level += 1
            wave_length += 5
            for i in range(wave_length):
                    enemy = Em(random.randrange(50, WIDTH-10), random.randrange(-1500*level/5, -100), random.choice(["red","green","purple","blue"]))
                    enemies.append(enemy)
    boost = False
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
    keys = pygame.key.get_pressed()
   
    if keys[pygame.K_LEFT] and player.x - player_vel > 0:
        player.x -= player_vel
    if keys[pygame.K_RIGHT] and player.x + player_vel + player.get_width() < WIDTH:
        player.x += player_vel
    if keys[pygame.K_UP] and player.y - player_vel > 0:
        player.y -= player_vel
    if keys[pygame.K_DOWN] and player.y + player_vel + player.get_height() < HEIGHT:
        player.y += player_vel

    if keys[pygame.K_LSHIFT]:
        boost = True
        start = time.time()
        if boost == True:
            player_vel = boost_speed
            
            


    elif event.type == pygame.KEYUP:
        if event.key == pygame.K_LSHIFT:
            player_vel = 3

    for enemy in enemies:
            enemy.move(enemy_vel)
    
    redraw_window()        

main()
score_write()

尝试改变self.player_img = None to self.player_img = pygame.Surface((0, 0))在船舶类别中。另外,当您加载图像时,使用.convert or .convert_alpha()最后,例如img = pygame.image.load("image.png").convert_alpha()。它应该提高性能。

您也可以将其放入draw()在位块传送之前:

if not self.player_img:
    return
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我收到一个错误,参数 1 必须是 pygame.Surface,而不是 None。我该如何解决这个问题[关闭] 的相关文章

  • 如何查看Databricks中的所有数据库和表

    我想列出 Azure Databricks 中每个数据库中的所有表 所以我希望输出看起来像这样 Database Table name Database1 Table 1 Database1 Table 2 Database1 Table
  • 在 python 程序中合并第三方库的最佳实践是什么?

    下午好 我正在为我的工作编写一个中小型Python程序 该任务需要我使用 Excel 库xlwt and xlrd 以及一个用于查询 Oracle 数据库的库 称为CX Oracle 我正在通过版本控制系统 即CVS 开发该项目 我想知道围
  • Django 管理员在模型编辑时间歇性返回 404

    我们使用 Django Admin 来维护导出到我们的一些站点的一些数据 有时 当单击标准更改列表视图来获取模型编辑表单而不是路由到正确的页面时 我们会得到 Django 404 页面 模板 它是偶尔发生的 我们可以通过重新加载三次来重现它
  • SQLAlchemy 通过关联对象声明式多对多自连接

    我有一个用户表和一个朋友表 它将用户映射到其他用户 因为每个用户可以有很多朋友 这个关系显然是对称的 如果用户A是用户B的朋友 那么用户B也是用户A的朋友 我只存储这个关系一次 除了两个用户 ID 之外 Friends 表还有其他字段 因此
  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • 使用 matplotlib 绘制时间序列数据并仅在年初显示年份

    rcParams date autoformatter month b n Y 我正在使用 matpltolib 来绘制时间序列 如果我按上述方式设置 rcParams 则生成的图会在每个刻度处标记月份名称和年份 我怎样才能将其设置为仅在每
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • 如何替换 pandas 数据框列中的重音符号

    我有一个数据框dataSwiss其中包含瑞士城市的信息 我想用普通字母替换带有重音符号的字母 这就是我正在做的 dataSwiss Municipality dataSwiss Municipality str encode utf 8 d
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • 如何在ipywidget按钮中显示全文?

    我正在创建一个ipywidget带有一些文本的按钮 但按钮中未显示全文 我使用的代码如下 import ipywidgets as widgets from IPython display import display button wid
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • 如何使用Python创建历史时间线

    So I ve seen a few answers on here that helped a bit but my dataset is larger than the ones that have been answered prev
  • Pygame:有没有简单的方法可以找到按下的任何字母数字的字母/数字?

    我目前正在开发的游戏需要让人们以自己的名义在高分板上计时 我对如何处理按键有点熟悉 但我只处理过寻找特定的按键 有没有一种简单的方法可以按下任意键的字母 而不必执行以下操作 for event in pygame event get if
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 如何计算 pandas 数据帧上的连续有序值

    我试图从给定的数据帧中获取连续 0 值的最大计数 其中包含来自 pandas 数据帧的 id date value 列 如下所示 id date value 354 2019 03 01 0 354 2019 03 02 0 354 201
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • 如何使用 Pycharm 安装 tkinter? [复制]

    这个问题在这里已经有答案了 I used sudo apt get install python3 6 tk而且效果很好 如果我在终端中打开 python Tkinter 就可以工作 但我无法将其安装在我的 Pycharm 项目上 pip

随机推荐