【发布时间】:2013-06-08 19:03:24
【问题描述】:
这是我的 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 groups 列表中的Claudio Canepa:
您可以尝试在 director.init 调用中传递 do_not_scale=True ,这将使用更适合瓷砖的正投影。
您可以在脚本中查看 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()))
【问题讨论】:
-
将坐标转换为整数
-
确保所有瓦片的 x/y 坐标没有浮点分量,即 1.2345 -> 1.0 不知道如何在 python 中进行转换,但至少应该有 floor() 函数。
-
太棒了!帮助我在新的等距游戏中解决同样的问题。
标签: python cocos2d-iphone