【问题标题】:How do I display a tiled map in Pygame using Tiled and pytmx?如何使用 Tiled 和 pytmx 在 Pygame 中显示平铺地图?
【发布时间】:2015-03-14 20:12:44
【问题描述】:

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

我正在尝试创建一个程序,该程序可以显示在 Tiled 中创建并使用 pytmx 上传到 Pygame 的平铺地图。我遇到的唯一问题是在 Pygame 中将图像放到屏幕上。

这是我不断收到的错误: 回溯(最近一次通话最后): 文件“C:\Users\b\Desktop\Frozen Map Textures\test.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()

【问题讨论】:

  • 顺便说一句,我在 64 位 Windows 8 上运行。我不确定这是否会对任何事情产生影响。
  • 请您告诉我们当您尝试使用 blit 时会发生什么。
  • 我会的。我一直无法尝试。在我看到你的回答之前我不得不离开小镇。

标签: python python-2.7 pygame tiled


【解决方案1】:

我对pytmx不是很熟悉,但我认为问题在于变量i在第一个for循环中从0运行到2600(你有2600个项目/图像/图块在images 列表)。但是当您创建磁贴位置列表 (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

我希望这会有所帮助:)

【讨论】:

  • 我更新了我的代码并添加了我收到的错误消息。你知道问题是什么吗?我只是找不到列表索引提供类型 None 的原因。
  • 嘿!忽略我最后的评论。原来我的地图文件中有一个空白区域......谢谢你的所有时间!您的建议确实让我的代码看起来不错!
  • 我认为 i 是 0 到 2500(即 50 * 50)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-05
  • 2020-06-14
  • 1970-01-01
  • 1970-01-01
  • 2020-11-02
  • 2021-07-13
  • 1970-01-01
相关资源
最近更新 更多