python - 我做了一个平台游戏,但出了点问题
问题描述
我已经开始制作一个平台游戏,但我的第一次尝试是一个很大的失败。
代码是:
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,但都给出了那个错误。试图重新编写程序,但我仍然看到这一点。我究竟做错了什么?
解决方案
错误信息很清楚:如果你调用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 相同的像素格式,这对游戏的性能很重要。
推荐阅读
- javascript - Vue.js v-bind:值不显示值
- sql - 如何在 CloudFoundry 上部署 Column View 工件
- c# - 使用 ID 列表过滤的 Elasticsearch 多重匹配
- java - GeoMap 未正确居中
- wordpress - 我想创建一个 Wordpress 存档页面,该页面显示带有匹配查询变量的标签的帖子。是否有任何插件可以帮助我做到这一点?
- ios - 我如何通过一些快速登录来使应用程序崩溃?
- python - 蟒蛇健身房。看不到环境
- apache-spark - 使用文件名创建变量 - PySpark
- pipeline - 如何在 Spinnaker 中将 base64 工件转换为 json/yaml?
- android - 通过自定义 pin 对用户进行身份验证以访问密钥库