首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在游戏中使用pytmx?

如何在游戏中使用pytmx?
EN

Stack Overflow用户
提问于 2016-09-19 17:37:11
回答 1查看 3.9K关注 0票数 0

有一个类似于此的问题,但persons问题与我试图实现pytmx的方式不同,所以这是我第一次使用tiled,或者pytmx,我在处理pytmx上的文档时遇到了麻烦。

我只是不能让代码正确地执行。gameScreen.blit(image, position)中的位置参数是什么?在这个模块中所引用的层参数是什么?

代码语言:javascript
复制
import pygame
import time
import random
import pyganim
import sys
import os
import pytmx
from pytmx import load_pygame

pygame.init()


display_width = 800
display_height = 800

white = (255, 255, 255)

gameScreen = pygame.display.set_mode((display_width, display_height))
pygame.display.set_caption('2d Game')
clock = pygame.time.Clock()
def game_loop():
    gameExit = False
    while not gameExit:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                gameExit = True
        gameMap = pytmx.TiledMap('gamemap.tmx')
        image = gameMap.get_tile_image(0, 0, 0)
        gameScreen.blit(image, position)
        pygame.display.update()
        clock.tick(30)
game_loop()
pygame.quit()
quit()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-20 00:58:59

这个代码有很多错误。-是你写的还是从别的地方弄来的?在尝试使用平铺地图这样高级的事情之前,您可能需要确保您更好地理解Pygame。另外,这是整个代码吗,还是你遗漏了一些代码?

为了解决最大的问题:

1)每帧都要加载贴图,这是一个很大的问题:

代码语言:javascript
复制
gameMap = pytmx.TiledMap('gamemap.tmx')

您只需要加载一次地图数据。在游戏循环之前就这么做。

2)代码中唯一发生的绘图是:

代码语言:javascript
复制
image = gameMap.get_tile_image(0, 0, 0)
gameScreen.blit(image, position)

这将在地图第0层的位置(0,0)获取瓷砖,并在一个名为" position“的变量(似乎不存在)指定的坐标处使用blits。因此,即使它能工作,它也只会在屏幕上画一个瓷砖。

3)“所引用的图层参数是什么?”

你以前用过瓷砖吗?“平铺”是一个地图编辑器,它允许您在多个层中绘制,这样您就可以在其他瓷砖的基础上使用瓷砖。0层将是您地图的第一个(底部)层。

4)如果您使用的是PyTMX,那么您需要使用load_pygame()函数,它看起来像是导入的,但没有使用。事实上,有大量的进口产品--它们都是为了什么?

这段代码的一个简单工作版本将加载映射,然后将屏幕上的所有瓷砖混合起来,如下所示:

代码语言:javascript
复制
import pygame
import pytmx

pygame.init()


display_width = 800
display_height = 800

white = (255, 255, 255)

gameScreen = pygame.display.set_mode((display_width, display_height))
pygame.display.set_caption('2d Game')
clock = pygame.time.Clock()

# load map data
gameMap = pytmx.load_pygame('gamemap.tmx')

def game_loop():
    gameExit = False
    while not gameExit:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
               gameExit = True

    # draw map data on screen
    for layer in gameMap.visible_layers:
        for x, y, gid, in layer:
            tile = gameMap.get_tile_image_by_gid(gid)
            gameScreen.blit(tile, (x * gameMap.tilewidth,
                                   y * gameMap.tileheight))
    pygame.display.update()
    clock.tick(30)

game_loop()
pygame.quit()

注意,这不是最好的方法,但它是最简单的。我鼓励你寻找一些游戏和PyTMX教程和工作的方式。在同一时间尝试学习太多的新东西是非常令人沮丧的。从PyTMX文档中可以看出,它并不是真正针对初学者的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39579000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档