在pygame中加入多处理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在pygame中加入多处理相关的知识,希望对你有一定的参考价值。
我尝试在python中使用pygame模块创建一个简单的游戏。这是一个双人游戏,所以它涉及在同一个pygame屏幕中获得同步输入或换句话说,事件。我尝试使用多线程,即通过运行共享pygame屏幕的两个线程,但由于GIL而无法工作。因此,当我尝试使用多处理时,我遇到了一个问题,即我无法共享相同的pygame屏幕。那么有没有办法创建一个具有pygame屏幕的池,就像序列一样?如果没有,是否还有其他可能更好的方法来解决我的问题?任何答案将不胜感激。谢谢。
您可能不需要多线程和更少的多处理。
你是什么意思“它因GIL而无效”?尝试执行多线程时是否收到任何错误消息?
有可能创建一个天真的多线程设计,可以方便地更新由不同玩家控制的对象,但无论如何都必须要小心。 GIL应该只影响你,你真的没有任何好处,比如在你的应用程序中使用超过1个核心,但不会给你任何错误。
至于使用多处理,辅助过程无论如何都无法使用屏幕Surface,并且跨过程传递表面(图像)大多不值得(如果可行的话)。
我的意思是当我按下一个按钮时,只检测到其中一个线程按下了键。我没有得到任何错误。这是由于GIL对吗?如果我错了,我很抱歉。
不 - 这与GIL没有任何关系 - 它与pygame事件API有关,而不是设计用于线程。
在Pygame中有两种处理按键的方法:检查KEYDOWN
事件,或调用pygame.key.get_pressed
。我通常更喜欢第二种,因为它不依赖于操作系统或Bios级别的键自动重复设置(当然,除非它是一个只执行一次的操作,而不是按下键时)。
无论如何,在任何与pygame相关的项目中,你应该在代码中的一个地方和同一个线程上检查pygame事件(包括按键)。从“外部世界”获得所需信息后,您可以根据需要设置内部变量。
但是,由于您不提供任何代码,我可以向您的多线程代码建议的最直接的修复是使用get_pressed
而不是检查事件:它可能适用于两个线程。 (多处理代码会比这复杂得多)。
以上是关于在pygame中加入多处理的主要内容,如果未能解决你的问题,请参考以下文章
在 Pygame 中加载资产时出现 FileNotFound 错误 [重复]