これが私のcocosコードです:
class Startbox(Layer):
def __init__(self):
Layer.__init__(self)
self.batch = BatchNode()
self.add(self.batch)
img = pyglet.image.load('images/map_sprites.png')
tileset = pyglet.image.ImageGrid(img, 3, 15, 96, 96)
x, y = 0, 0
for i in range(10):
for j in range(10):
spr = Sprite(tileset[1])
spr.x = x
spr.y = y
self.batch.add(spr)
x += 96
y += 96
x = 0
スプライトを取得しようとしていますが、ウィンドウを覆うためにディスプレイが並んでいます。そのコードは誤った結果を生成します。タイルの間に次のようなスペースがあります。
なぜこれが起こるのか、またはそれを修正する方法がわかりません。次の pyglet コードは基本的に同じことを行いますが、スプライトが適切に整列され、黒い線は作成されません。
class screen(pyglet.window.Window):
def __init__(self, w, h):
super(screen, self).__init__(w, h)
sprite_sheet = grid(pyglet.image.load("images/map_sprites.png"), 3, 15)
self.batch = pyglet.graphics.Batch()
self.all_sprites = []
x, y = 0, 0
for i in range(10):
for j in range(10):
sprite = pyglet.sprite.Sprite(sprite_sheet[1], batch=self.batch)
sprite.x = x
sprite.y = y
self.all_sprites.append(sprite)
x += 96
y += 96
x = 0
編集:解決策を見つけたので、将来誰かがこれに出くわした場合に備えて明確にするために回答として投稿したかったのですが、OP を編集するだけで十分だと思います。
Cocos2d Google グループリストのClaudio Canepaから:
director.init 呼び出しで do_not_scale=True を渡してみてください。これにより、タイルにより適した正投影が使用されます。
スクリプト
test_tiles.py
test_tmx.py
test_platformer.pyで cocos タイルマップの例を見ることができます。
実装は非常に簡単です:
if __name__ == '__main__':
director.init(width, height, do_not_scale=True)
director.run(Scene(Startbox()))