2

这是我的椰子代码:

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 tilemaps 的示例

实现非常简单:

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

1 回答 1

1

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

« 如果 SpriteSheet 使用 Zwoptex 创建,则将精灵间距间隙添加到 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 回答