在cocos2d中显示精灵的问题

时间:2013-06-05 16:22:35

标签: python cocos2d-iphone

这是我的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

我正在尝试获取精灵并且并排显示以覆盖窗口。 该代码产生错误的结果,瓷砖之间有一个空格,如下所示:

notice the black lines

我不明白为什么会这样,或者如何修复它。下面的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 groups列表中的 Claudio Canepa

  

您可以尝试在director.init调用中传递do_not_scale = True,这将使用更适合切片的ortographic投影。

     

您可以在脚本中查看cocos tilemaps的示例      test_tiles.py
     test_tmx.py
     test_platformer.py

实施非常简单:

if __name__ == '__main__':
    director.init(width, height, do_not_scale=True)
    director.run(Scene(Startbox()))

1 个答案:

答案 0 :(得分:1)

在cocos2d的python版本中不起作用,但在iPhone版本的cocos2d中观察到相同。所以这可能会有所帮助: -

«如果使用Zwoptex创建SpriteSheet,则将精灵间距间隔添加到2px +。

«编辑ccConfig.h文件并定义此

#ifndef CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL
#define CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL 1
#endif

请参阅我的答案:Thread in Stackoverflow