我已经从 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()
你混淆了 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))