2016-09-19 2 views
0

이와 비슷한 질문이 있지만 질문은 사람이 pytmx을 구현하는 것과 같은 방식이 아니므로 tiled 또는 pytmx으로 작업 한 것은 처음이므로 문제가 있습니다. docs on pytmx.파이 게임에서 pytmx를 사용하는 방법?

코드를 올바르게 실행할 수 없습니다. gameScreen.blit(image, position)의 위치 매개 변수는 무엇입니까? 이 모듈에서 참조하는 레이어 매개 변수는 무엇입니까?

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() 

답변

1

이 코드에는 많은 문제가 있습니다. - 그걸 쓰거나 다른 곳에서 구 했니? 바둑판 식으로 된 맵을 사용하는 것처럼 진보 된 것을하기 전에 파이 게임을 더 잘 이해할 필요가있을 것입니다. 또한, 전체 코드입니까? 아니면 일부 코드를 남겨 두었습니까?

가장 큰 문제를 해결하려면, 당신은 한 번만지도 데이터를로드 할 필요

gameMap = pytmx.TiledMap('gamemap.tmx') 

:

1) 당신은 당신의 타일은 큰 문제가 모든 프레임을,지도로드. 게임 루프 전에 이것을하십시오.

2) 코드에서 일어나고있는 유일한 그림은 이것이다 :이 위치 (0에서 타일을 얻을 수

image = gameMap.get_tile_image(0, 0, 0) 
gameScreen.blit(image, position) 

, 0)지도와 변수에 의해 지정된 좌표 블릿을 층 0에 존재하지 않는 "위치"라고 불리는 것입니다. 그래서 그것이 작동하더라도 그것은 화면에 하나의 타일만을 그릴 것입니다.

3)

는 이전에 타일을 사용한 적이 "를 참조하는 계층 매개 변수는 무엇인가?" 바둑판 식 배열은 여러 레이어로 그릴 수있는지도 편집기이므로 다른 타일 위에 타일을 배치 할 수 있습니다. 레이어 0은지도의 첫 번째 (맨 아래) 레이어입니다.

4) Py 게임과 함께 PyTMX를 사용하는 경우 가져온 것처럼 보이지만 사용하지 않은 load_pygame() 함수를 사용해야합니다. 실제로, 수입 톤이 있습니다 - 모두 거기에 무엇입니까?

이 코드의 간단한 작업 버전이지도를로드 할 다음과 같이 화면에 모든 타일 블럭 전송 :

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() 

참고이 그 일을하는 가장 좋은 방법은 아니지만, 가장 단순합니다. 파이 게임 (Pygame) 및 PyTMX 튜토리얼을 찾아보고 작업을 해보는 것이 좋습니다. 동시에 너무 많은 새로운 것을 시도하고 배우는 것은 매우 실망 스러울 수 있습니다. PyTMX 문서에서 알 수 있듯이 초급 수준의 대상은 아닙니다.

+0

고맙습니다. 타일링 된 코드와 pytmx를 사용하고 있습니다. 예를 들어, 코드의 많은 부분이 잘못 처리되었다는 것을 알고 있습니다. 그러나 그 이유는 아직 많은 지식이 없기 때문입니다. 자습서를 추천 해 주시겠습니까? ive는 약간을 보았지만, 대부분은 그들이 끝내지 않는 막 다른 곳으로 인도하거나, 내가 성취하려는 것을 향해 기울지 않는 것처럼 보입니다. – Feline

+0

글쎄, 파이썬 구문에 대한 확실한 지식을 가지고 시작할 것입니다. 그런 다음 파이 게임에서 시작하십시오. codecademy.com에는 상당히 훌륭한 Python 스타터가 있습니다. 파이 게임 (Pygame)의 경우, sentdex 튜토리얼이 인기가 있거나 (Youtube에서 검색), 내 자신을 시도해 볼 수 있습니다. 기본 사항을 다루고 PyTMX : https://www.youtube와 같은 고급 주제를 다루고 있습니다.com/c/KidsCanCodeOrg – Chris

+0

x와 y에 타일 너비와 높이를 곱하는 것을 잊어 버렸습니다. 당신은 내 영웅입니다. D –