我知道有一个类似的问题,但答案不够具体,对我的情况没有用处。
我正在尝试创建一个程序,可以显示在 Tiled 中创建并使用 pytmx 上传到 Pygame 的平铺地图。我遇到的唯一问题是在 Pygame 中将图像传输到屏幕上。
这是我不断收到的错误: 回溯(最近一次调用最后一次): 文件“C:\Users\Desktop\Frozen Map Textures est.py”,第 32 行,位于 screen.blit(图像[i],(x*32,y*32)) TypeError:参数 1 必须是 pygame.Surface,而不是 None
如果有人知道如何解决这个问题,我将非常感激!感谢您的帮助!
代码如下:
import pygame
from pytmx import load_pygame
import random
white = (255,255,255)
#create window
screenSize = (800,600)
screen = pygame.display.set_mode(screenSize)
pygame.display.set_caption("GameName")
screen.fill(white)
gameMap = load_pygame("Frozen.tmx")
#creates list of single tiles in first layer
images = []
for y in range(50):
for x in range(50):
image = gameMap.get_tile_image(x,y,0)
images.append(image)
#displays tiles in locations
i = 0
for y in range(50):
for x in range(50):
screen.blit(images[i],(x*32,y*32))
i += 1
#main loop
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.display.flip()
pygame.quit()
我对pytmx不太熟悉,但我认为问题是变量
i
在第一个0
循环中从2600
运行到for
(你在images
中有2600个项目/图像/图块)
列表)。但是,当您创建图块位置列表 (imageLocs
) 时,i
仅从 0
到 49
,因此您有一个 50
不同位置的列表。
这意味着每个图块没有“足够”的位置。
除此之外,您不需要在Python中的
for i in rang(value)
循环中增加任何变量,因为i
运行抛出(即分配给)range()
函数返回的所有值。
您可以更新代码以避免此问题:
#Original code
#create a list of 2600 single tiles in first layer
images = []
for y in range(50):
for x in range(50):
image = gameMap.get_tile_image(x,y,0)
images.append(image)
#blit all tiles onto the screen
i = 0 #runs from 0 to 2600
for y in range(50):
for x in range(50):
screen.blit(images[i],(x * 32, y * 32))
i += 1
#Orginal code
我希望这有帮助:)