首页 > 解决方案 > 我做了一个平台游戏,但出了点问题

问题描述

我已经开始制作一个平台游戏,但我的第一次尝试是一个很大的失败。

代码是:

import pygame as p

p.init()
win = p.display.set_mode((1280, 720))

p.display.set_caption('Project')

player = [p.image.load('sprite/cube.jpg')]
bg = [p.image.load('sprite/bgone.jpg')]

clock = p.time.Clock()

x = 1280 / 2
y = 720 / 1.5
width = 56
height = 60
speed = 10
delaytime = 50
jump = False
jumpspeed = 10

anim = 0


def draw():
    global anim
    global x
    global y
    if anim + 1 >= 30:
        anim = 0
    win.blit(bg, (0, 0))
    win.blit(player, (x, y))
    p.display.update()


run = True
while run:
    clock.tick(30)

    for event in p.event.get():
        if event.type == p.QUIT:
            run = False

    k = p.key.get_pressed()
    if k [p.K_LEFT] and x > 5:
        x = x - speed
    if k [p.K_RIGHT] and x < (1280 - width - 5):
        x = x + speed
    if k [p.K_a] and x > 5:
        x = x - speed
    if k [p.K_d] and x < (1280 - width - 5):
        x = x + speed
    if k [p.K_SPACE]:
        jump = True
    if not jump:
        bhop = False
    if jump:
        speed = 15
        if jumpspeed >= -10:
            if jumpspeed < 0:
                y += (jumpspeed ** 2) / 2
            else:
                y -= (jumpspeed ** 2) / 2
            jumpspeed -= 1
        else:    
            jump = False
            jumpspeed = 10
            speed = 10
    draw()
p.quit()
quit()

错误是:

Traceback (most recent call last):
  File "it dosen't matter", line 68, in <module>
    draw()
  File "it dosen't matter", line 30, in draw
    win.blit(bg, (0, 0))
TypeError: argument 1 must be pygame.Surface, not list

我不知道这是什么。我看了很多视频,但没有人帮忙,所以我尝试了所有我知道的 ide,但都给出了那个错误。试图重新编写程序,但我仍然看到这一点。我究竟做错了什么?

标签: pythonpygame

解决方案


错误信息很清楚:如果你调用blit()第一个参数必须是一个Surface,而不是一个列表。

查看您的代码

bg = [p.image.load('sprite/bgone.jpg')]
...
win.blit(bg, (0, 0))

我们看到您确实将列表作为第一个参数传递给blit函数。

不清楚为什么首先将背景图像放入列表中,因此只需将代码更改为

bg = p.image.load('sprite/bgone.jpg').convert()
...
win.blit(bg, (0, 0))

convert()确保bg-Surface 具有与显示 Surface 相同的像素格式,这对游戏的性能很重要。


推荐阅读