2

これが私の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()))
4

1 に答える 1

1

Python版のcocos2dでは動作しませんでしたが、iPhone版のcocos2dでも同様の現象が見られました。したがって、これが役立つ場合があります:-

« Zwoptex で作成された SpriteSheet の場合、スプライト間隔のギャップを 2px + に追加します。

« ccConfig.h ファイルを編集し、これを定義します

#ifndef CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL
#define CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL 1
#endif

これで私の答えを参照してください:Stackoverflowのスレッド

于 2013-06-08T04:26:19.107 に答える