我从制作平台游戏开始,但是我的第一次尝试是一个很大的失败。
代码是:
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,但都出错了。试图重新编写程序,但我仍然看到了这一点。我在做什么错了?
答案 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相同的像素格式,这对于游戏性能至关重要。