Tiled 和 PyGame,加载 Spritesheet 旋转和翻转地图

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

我已经从 Tiled 生成了一个 CSV 文件来显示我的 gam 地图,目前它被分解成 4 个文件。此时尝试加载一个布局,该布局是我的基础层,包括草地、泥土等。在地图中加载它时,它会旋转和翻转并且无法识别。我试过玩变量,但我不明白为什么它会旋转。不仅如此,spritesheet 还加载了错误的图像。

这是一张地图的图片,它应该是这样的:

这是我运行游戏时发生的事情:

这是我正在使用的精灵表

这是代码,这应该是一个完整的运行示例:

import pygame,sys
from pygame.locals import *
import csv

running = True
pygame.init()
screen = pygame.display.set_mode((1280, 900))

def load_sprite_sheet(x_range, y_range, sprite_w, sprite_h):

    x_coord = 16 * x_range
    y_coord = 16 * y_range
    width = sprite_w
    height = sprite_h

    sheet = pygame.image.load("assets/TileMap/tilemap_packed.png").convert_alpha()
    single_image = sheet.subsurface((x_coord, y_coord, width, height))
    print(x_coord, y_coord)

    return single_image

grass_layout = "assets/TileMap/layout_grass.csv"

grasses = {
    "0": load_sprite_sheet(0, 0, 16, 16),
    "1": load_sprite_sheet(1, 0, 16, 16),
    "3": load_sprite_sheet(2, 0, 16, 16),
    "12": load_sprite_sheet(0, 1, 16, 16),
    "13": load_sprite_sheet(1, 1, 16, 16),
    "14": load_sprite_sheet(2, 1, 16, 16),
    "24": load_sprite_sheet(0, 2, 16, 16),
    "25": load_sprite_sheet(1, 2, 16, 16),
    "26": load_sprite_sheet(2, 2, 16, 16),
    "36": load_sprite_sheet(0, 3, 16, 16),
    "37": load_sprite_sheet(1, 3, 16, 16),
    "38": load_sprite_sheet(2, 3, 16, 16),
    "39": load_sprite_sheet(3, 3, 16, 16),
    "40": load_sprite_sheet(4, 3, 16, 16),
    "41": load_sprite_sheet(5, 3, 16, 16),
    "42": load_sprite_sheet(6, 3, 16, 16),
    "43": load_sprite_sheet(7, 3, 16, 16),
}

while running:

    for event in pygame.event.get():
        # Handle a QUIT event and close the program safely
        if event.type == pygame.QUIT:
            running = False
            pygame.quit()

        # Handle user pressing ESC and close program safely
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                running = False
                pygame.quit()

    # Fill the screen
    screen.fill('BLUE')

    with open(grass_layout, 'r') as csv_file:

        grasses_map = csv.reader(csv_file)

        for x_index, row in enumerate(grasses_map, 0):
            for y_index, col in enumerate(row, 0):
                if col in grasses.keys():
                    screen.blit(grasses[col], (x_index * 16, y_index * 16))

    # Update the screen
    pygame.display.update()
python pygame tiled
1个回答
0
投票

你混淆了 x 和 y 坐标(

x_index
y_index
)。行定义 y 坐标,列定义 y 坐标:

for y_index, row in enumerate(grasses_map, 0):
    for x_index, col in enumerate(row, 0):
        if col in grasses.keys():
            screen.blit(grasses[col], (x_index * 16, y_index * 16))
© www.soinside.com 2019 - 2024. All rights reserved.