如何使用 Tiled 和 pytmx 在 Pygame 中显示平铺地图?
How do I display a tiled map in Pygame using Tiled and pytmx?
我知道有一个类似的问题,但答案不够具体,对我的情况没有用。
我正在尝试创建一个程序,该程序可以显示在 Tiled 中创建并使用 pytmx 上传到 Pygame 的平铺地图。我遇到的唯一问题是在 Pygame.
中将图像 blitting 到屏幕上
这是我不断收到的错误:
追溯(最近一次通话):
文件 "C:\Users\b\Desktop\Frozen Map Textures\test.py",第 32 行,位于
screen.blit(图片[i],(x*32,y*32))
类型错误:参数 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
在第一个 for
循环中从 0
运行到 2600
( images
列表中有 2600 个项目/图像/图块)。但是当您创建图块位置列表 (imageLocs
) 时,i
仅从 0
运行到 49
,因此您有一个列表 50
个不同的位置。
这意味着您没有 "enough" 每个板块的位置。
除此之外,您不需要在 python 的 for i in rang(value)
循环中递增任何变量,因为 i
运行抛出(即分配给)所有值range()
函数 returns.
您可以更新代码以避免此问题:
#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
希望对您有所帮助:)
我知道有一个类似的问题,但答案不够具体,对我的情况没有用。
我正在尝试创建一个程序,该程序可以显示在 Tiled 中创建并使用 pytmx 上传到 Pygame 的平铺地图。我遇到的唯一问题是在 Pygame.
中将图像 blitting 到屏幕上这是我不断收到的错误: 追溯(最近一次通话): 文件 "C:\Users\b\Desktop\Frozen Map Textures\test.py",第 32 行,位于 screen.blit(图片[i],(x*32,y*32)) 类型错误:参数 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
在第一个 for
循环中从 0
运行到 2600
( images
列表中有 2600 个项目/图像/图块)。但是当您创建图块位置列表 (imageLocs
) 时,i
仅从 0
运行到 49
,因此您有一个列表 50
个不同的位置。
这意味着您没有 "enough" 每个板块的位置。
除此之外,您不需要在 python 的 for i in rang(value)
循环中递增任何变量,因为 i
运行抛出(即分配给)所有值range()
函数 returns.
您可以更新代码以避免此问题:
#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
希望对您有所帮助:)