Python Sprite和中等大小的平铺贴图相对较少时性能较差?

Python Sprite和中等大小的平铺贴图相对较少时性能较差?,python,cocos2d-x,pyglet,cocos2d-python,Python,Cocos2d X,Pyglet,Cocos2d Python,我正在使用pythoncocos2d,并试图显示一个包含许多分幅的地图。约100x100 32px瓷砖。当我放大时,它工作正常。当我缩小以查看更多内容时,它会变得非常起伏 我还试着用我自己的精灵,那更糟。考虑到我已经看到pygame处理比这更复杂的精灵,我不知道为什么它会如此糟糕。平铺贴图版本是否与我的缩放方式有关 编辑:我设法使用批处理极大地提高了性能(我不知道这是一件事,我花了一些时间四处寻找)。这可能应该在不那么晦涩的地方提及(除非我只是愚蠢而错过了它)。在任何情况下,我仍然对如何改进这一

我正在使用pythoncocos2d,并试图显示一个包含许多分幅的地图。约100x100 32px瓷砖。当我放大时,它工作正常。当我缩小以查看更多内容时,它会变得非常起伏

我还试着用我自己的精灵,那更糟。考虑到我已经看到pygame处理比这更复杂的精灵,我不知道为什么它会如此糟糕。平铺贴图版本是否与我的缩放方式有关

编辑:我设法使用批处理极大地提高了性能(我不知道这是一件事,我花了一些时间四处寻找)。这可能应该在不那么晦涩的地方提及(除非我只是愚蠢而错过了它)。在任何情况下,我仍然对如何改进这一点(即每批有多少雪碧?)以及如何改进tilemap的反馈感兴趣

class Tile(cocos.sprite.Sprite):
    def __init__(self, image, position):
        super().__init__(image, position=position)

class GridLayer(cocos.layer.ScrollableLayer):
    def __init__(self):
        super().__init__()

        for x in range(50):
            for y in range(50):
                self.add(Tile('tile.png', (x*32, y*32)))



class Scroll(cocos.layer.ScrollingManager):
    is_event_handler = True

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        win_size = Vector2(*cocos.director.director.get_window_size())

        self.set_focus(win_size.x / 2, win_size.y / 2)

    def on_mouse_drag(self, x, y, dx, dy, buttons, modifiers):
        if buttons == 1:
            a, b = self.fx - dx, self.fy - dy
            self.force_focus(a, b)

    def on_mouse_scroll(self, x, y, buttons, dir):
        if self.scale < 1: dir *= self.scale
        self.scale += dir * 0.1


def main():
    cocos.director.director.init(1024, 600, resizable=True)

    scroll = Scroll()
    # This is the time map version:
    grid = cocos.tiles.load('tmp.tmx')['Tile Layer 1']
    scroll.add(grid)

    # This is the custom sprite version:
    # scroll.add(GridLayer())


    main_scene = cocos.scene.Scene(scroll)
    cocos.director.director.run(main_scene)

if __name__ == '__main__':
    main()
类互动程序(cocos.sprite.sprite):
定义初始(自我、图像、位置):
超级()
类GridLayer(cocos.layer.ScrollableLayer):
定义初始化(自):
super()。\uuuu init\uuuuu()
对于范围(50)内的x:
对于范围(50)内的y:
self.add(Tile('Tile.png',(x*32,y*32)))
类滚动(cocos.layer.ScrollingManager):
事件处理程序是否为真
定义初始化(self,*args,**kwargs):
super()
win\u size=Vector2(*cococos.director.director.get\u window\u size())
自我设置焦点(win\u size.x/2,win\u size.y/2)
鼠标拖动时的def(自身、x、y、dx、dy、按钮、修改器):
如果按钮==1:
a、 b=self.fx-dx,self.fy-dy
自聚焦(a,b)
鼠标上的def滚动(自身、x、y、按钮、方向):
如果self.scale<1:dir*=self.scale
self.scale+=dir*0.1
def main():
cocos.director.director.init(1024600,resizeable=True)
滚动=滚动()
#这是时间映射版本:
grid=cocos.tiles.load('tmp.tmx')['Tile Layer 1']
滚动。添加(网格)
#这是自定义精灵版本:
#scroll.add(GridLayer())
主场景=cocos.scene.scene(滚动)
cocos.director.director.run(主场景)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()