我做了一个平台游戏,但是出了点问题

时间:2019-12-12 14:06:14

标签: python pygame

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

代码是:

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,但都出错了。试图重新编写程序,但我仍然看到了这一点。我在做什么错了?

1 个答案:

答案 0 :(得分:0)

错误消息非常清楚:如果调用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相同的像素格式,这对于游戏性能至关重要。