所以我正在经历用Python制作游戏的开始阶段,我正在寻找一个能够处理像素并相对快速地对它们进行blit的库。
我的第一个想法是pygame,因为它处理纯2D表面,但它只允许通过pygame.get_at(),pygame.set_at()和pygame.get_buffer()访问像素,所有这些都会在每次调用时锁定表面,这使得它们使用起来很慢。我也可以使用PixelArray和surfarray类,但它们在它们的生存期内都是锁定的,唯一的方法是将像素复制到一个新的表面上,或者使用surfarray.blit_array,这需要创建一个屏幕的子表面,如果数组比屏幕小(如果它比屏幕小,我可以只使用数组的一小部分,这是没有问题的)。
我没有太多使用PyOpenGL或Pyglet的经验,但我想知道是否有更快的库来做像素处理,或者有没有更快的方法,在Pygame中做像素处理。我用C语言做了一些SDL和OpenGL的工作,我确实喜欢在我的程序中添加顶点/片段着色器的想法。
我的程序将主要处理加载图像和对表面的写入/读取。
发布于 2010-04-14 08:40:39
你试过Python Imaging Library吗?你仍然需要通过frombuffer或类似的方式将数据传回pygame,以进行but,但PIL可以处理像素访问。
发布于 2010-04-14 12:16:34
我检查了pyglet,当图像没有太多操作时,它在静态每像素碰撞中工作得很好;但是,我不确定它对动态图像有多好。
简而言之,我正在寻找一个能够快速显示像素缓冲区的库。此缓冲区将不断变化,因此快速访问和blitting是必不可少的。这可以使用SDL在C中相对容易地完成;但是,我正在寻找Python中的类似方法。在这一点上,我甚至不太担心硬件加速,尽管它肯定会很好。
发布于 2014-02-06 03:53:49
检查Simple and Fast Multimedia Library的Python bindings。来自it's documentation:
它实现了相同的2D绘图和OpenGL相关函数(更多细节见它们的基类sf::RenderTarget ),不同之处在于结果存储在屏幕外的纹理中,而不是显示在窗口中。
渲染到纹理在各种情况下都很有用:
使用OpenGL
渲染的3D对象中的精灵(
另请检查包含和的方法与的sf::Rect< T > Class Template相交。
https://stackoverflow.com/questions/2633900
复制相似问题