Tei*_*ion 3 python pygame twisted
在昨天选择不好的问题后,我再次尝试.
我的作品中有一个tic tac toe程序,纯粹是为了学习网络游戏.
我对twisted的理解是我应该让服务器类运行reactor,然后让每个玩家作为客户端连接到它(服务器是一个单独的实体).鉴于我在上一个问题中的评论,我怀疑我会以完全错误的方式解决这个问题.
我应该做什么以及我应该关注哪些教程或文档?
Cra*_*ast 12
将pygame与twisted相结合的难点在于谁控制了主循环.这通常需要将任何类型的UI(GTK,Tkinter等)mainloop与Twisted结合起来,PyGame也不例外.
我的建议是,由于网络延迟是重要的,因为扭曲具有很好的调度框架,是你让扭曲的反应器运行,并采取主循环的控制,然后用LoopingCall,让您处理来自pygame的事件.
在最基本的:
from twisted.internet.task import LoopingCall
DESIRED_FPS = 30.0 # 30 frames per second
def game_tick():
events = pygame.events.get()
for event in events:
# Process input events
redraw()
# Set up a looping call every 1/30th of a second to run your game tick
tick = LoopingCall(game_tick)
tick.start(1.0 / DESIRED_FPS)
# Set up anything else twisted here, like listening sockets
reactor.run() # Omit this if this is a tap/tac file
Run Code Online (Sandbox Code Playgroud)
虽然这起初看起来很简单,但它带来了危险.如果你花费大量时间在游戏滴答中进行处理,那么你就有可能使扭曲的反应堆挨饿,使其无法处理事件.如果你需要定时事件,不要阻止,而是使用像扭曲的工具reactor.callLater.您可以越多地避免阻止,您的应用程序响应越快.在一些段落中要描述的内容太多了,因为如果你从未对异步或非阻塞库进行编程,那么编程for twisted是一种真正需要习惯的思维模式.
有关更完整的示例,请查看游戏库中的" gam3 ",以便与twisted(包括模拟事件的世界时钟)进行交互,并查看其中一个扭曲的开发人员制作的示例游戏,以展示如何集成twisted和pygame.
| 归档时间: |
|
| 查看次数: |
2809 次 |
| 最近记录: |