如何使用 Tiled 和 pytmx 在 Pygame 中显示平铺地图?

问题描述 投票:0回答:2

我知道有一个类似的问题,但答案不够具体,对我的情况没有用处。

我正在尝试创建一个程序,可以显示在 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()
python python-2.7 pygame tiled
2个回答
1
投票

我对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

我希望这有帮助:)


0
投票

我目前正在尝试与你类似的方法。我尝试了你的代码,并成功打印了我的地图,但只有 1 个图层。我的背景图层已打印,但所有其他图层(例如对象、碰撞等)均未打印,有人知道可能是什么问题吗? 这是截图

My Tiled project

What I got

抱歉,如果我的问题不够清楚!

© www.soinside.com 2019 - 2024. All rights reserved.