2016-05-19 9 views
2

私はクラスで最終プロジェクトの試合をしています。私はパイゲームとこのゲーム開発のすべてには全く新しいものです。このvideoを私のガイドとして使用しました。pygameを解決するbinascii.Error:間違った埋め込みですか?

私は私のゲームのためのタイルマップを作るためにタイルを使用しますが、私はpygameのダウンロードとそれを実行しようとしたとき、私はこれだ:ここで

Traceback (most recent call last): 
File "C:\Users\Rose\Desktop\mp2 shits\shit.py", line 114, in <module> 
Game().main(screen) 
File "C:\Users\Rose\Desktop\mp2 shits\shit.py", line 58, in main 
self.tilemap = tmx.load('tileMap.tmx', screen.get_size()) 
File "C:\Users\Rose\Desktop\mp2 shits\tmx.py", line 835, in load 
return TileMap.load(filename, viewport) 
File "C:\Users\Rose\Desktop\mp2 shits\tmx.py", line 714, in load 
layer = Layer.fromxml(tag, tilemap) 
File "C:\Users\Rose\Desktop\mp2 shits\tmx.py", line 255, in fromxml 
data = data.decode('base64').decode('zlib') 
File "C:\Python27\lib\encodings\base64_codec.py", line 42, in base64_decode 
output = base64.decodestring(input) 
File "C:\Python27\lib\base64.py", line 325, in decodestring 
return binascii.a2b_base64(s) 
binascii.Error: Incorrect padding 
[Finished in 5.0s] 

は私のコードは次のとおりです。で

import pygame 
import tmx 

class Player(pygame.sprite.Sprite): 
def __init__(self, location, *groups): 
    super(Player, self).__init__(*groups) 
    self.image = pygame.image.load('red.gif').convert() 
    self.rect = pygame.rect.Rect(location, self.image.get_size()) 
    self.resting = False 
    self.dy = 0 

def update(self, dt, game): 
    last = self.rect.copy() 

    key = pygame.key.get_pressed() 
    if key[pygame.K_LEFT]: 
     self.rect.x -= 150 * dt 
    if key[pygame.K_RIGHT]: 
     self.rect.x += 150 * dt 

    if self.resting and key[pygame.K_SPACE]: 
     self.dy = -500 
    self.dy = min(400, self.dy + 40) 

    self.rect.y += self.dy * dt 

    new = self.rect 
    self.resting = False 
    for cell in game.tilemap.layers['triggers'].collide(new, 'blockers'): 
     if last.right <= cell.left and new.right > cell.left: 
      new.right = cell.left 
     if last.left >= cell.right and new.left < cell.right: 
      new.left = cell.right 
     if last.bottom <= cell.top and new.bottom > cell.top: 
      self.resting = True 
      new.bottom = cell.top 
      self.dy = 0 
     if last.top >= cell.bottom and new.top < cell.bottom: 
      new.top = cell.bottom 
      self.dy = 0 

    game.tilemap.set_focus(new.x, new.y) 

class Game(object): 
def main(self, screen): 
    clock = pygame.time.Clock() 

    background = pygame.image.load('bg.png') 

    self.tilemap = tmx.load('tileMap.tmx', screen.get_size()) 

    self.sprites = tmx.SpriteLayer() 
    start_cell = self.tilemap.layers['triggers'].find('player')[0] 
    self.player = Player((start_cell.px, start_cell.py), self.sprites) 
    self.tilemap.layers.append(self.sprites) 

    fps = 30 
    running = True 
    while running: 
     dt = clock.tick(fps) 

     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       running = False 
      if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE: 
       running = False 

     self.tilemap.update(dt/1000., self) 
     pygame.display.set_caption("Little Red") 
     screen.blit(background, (0,0)) 
     self.tilemap.draw(screen) 
     pygame.display.flip() 

if __name__ == '__main__': 
    pygame.init() 
    width = 1024 
    height = 480 
    screen = pygame.display.set_mode((width, height)) 
    Game().main(screen) 

感謝を助けてくれるほど親切な人に前進してください!

EDIT:これは私のマップは次のようになります... tmx file

+0

あなたの 'tmx.py'を投稿したり記述したりできますか? (tmxパッケージの現在のバージョンは 'tmx.load()'を提供していません) – nwk

+0

はい、これは質問の一番下にリンクされています。ありがとうございました。 – Rose

+0

いいえ、私は** tmx.py **を意味します。スタックトレースは、ゲームと同じディレクトリにあることを示しています。 – nwk

答えて

2

それはtmx.pyのように無条件にbase64でデコードしようとすると、データをZLIB-デコードし、データがで実際にどのような形式チェックせずに最近見えます。 TiledのデフォルトのバージョンをCSV形式のデータに変換するので、Tiledのマッププロパティで、タイルレイヤのデータフォーマットをbase64 + zlibに変更してください。

新しい地図を作成するときには、この設定を1回だけ行う必要があります。タイルはあなたの好みを覚えているからです。

+1

、ありがとうございました! – Rose

関連する問題