2016-09-19 36 views
0

これに似た質問がありましたが、私がpytmxを実装しようとしているのと同じような質問はありませんでしたので、これは初めてtiled、またはpytmxと一緒に作業しています。 pytmxのドキュメントpygameをpygameで使用するには?

私は正しいコードを実行することができません。 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

このコードには多くの問題があります。 - あなたはそれを書いたのですか、それともどこかから手に入れましたか? Tiledマップを使用するよりも先進的なことをしようとする前に、Pygameをよりよく理解する必要があるかもしれません。また、これはコード全体ですか、いくつか出てしまったのですか?

が最大の問題に対処するために:あなたは一度だけの地図データをロードする必要が

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

1)あなたは、あなたのタイルが大きな問題であるフレームごとに、マップのロードされています。ゲームのループの前にこれを行います。

2)コードで起こっのみ図面はこれです:これは、位置(0にタイルを取得

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

、0)マップと変数によって指定された座標にブリットを層0上存在していないと思われる「位置」と呼ばれる。だからそれが働いても、それは画面上に1つのタイルを描くだけでした。

3)

はあなたが前にタイルを使用している「を参照してレイヤパラメータは何ですか?」タイルは、複数のレイヤーで描画できるマップエディタで、他のタイルの上にタイルを配置できます。レイヤー0はマップの最初の(最下位の)レイヤーになります。

4)Pygameで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と本質的にうんざりしていたと私は知っているコードの多くはちょうどひどく行われていることを知っているが、それは主に私はまだ多くの知識を持っていないためです。チュートリアルをお勧めしますか?私が達成しようとしているものに向かって傾いていないか、終わっていない致命的な終わりにつながっているようです。 – Feline

+0

さて、私はあなたがPythonの構文をよく知っていることを確認することから始めます。その後、Pygameで始めてください。 codecademy.comにはかなり良いPythonスターターがあります。 Pygameについては、sentdexのチュートリアルが人気があり(YouTubeで検索)、自分で試してみることができます。これは基本をカバーし、PyTMX:https://www.youtubeのような高度なトピックになりつつあります。com/c/KidsCanCodeOrg – Chris

+0

xとyにタイルの幅と高さを掛けるのを忘れてしまった、あなたは私のヒーローです:D –