我正在使用python twisted制作游戏原型。参考其中一本书,我目前正在使用以下代码来更新游戏
def iterate(self):
now = time.time()
interval = now - self.beginFrame
self.beginFrame = now
# update the network
reactor.runUntilCurrent()
reactor.doSelect(0)
# update the games
for game in self.games:
game.update(interval)
但是,上面的代码在ubuntu机器中失败,错误“AttributeError:'EPollReactor'对象没有属性'doSelect'”。我正在使用twisted 16.1.1,以下是我的问题
1)我没有在twistedmatrix中给出的文档中找到runUntilCurrent和doSelect方法,这些方法不再可用吗?
2)是否更换了didSelect()的reactor.iterate()? 3)从早期的帖子中我发现reactor.iterate()可能使应用程序变慢和错误。处理需要事实UI更新的情况的最佳方法是什么?
答案 0 :(得分:0)
Twisted通常默认选择epoll reactor。 doSelect
功能在selectreactor
中可用。要使用select reactor,首先安装select reactor然后导入twisted.internet.reactor
。
from twisted.internet import selectreactor
selectreactor.install()
from twisted.internet import reactor
选择应该适用于大多数相关操作系统,这可能是您的图书使用它的原因。
1)我没有在twistedmatrix中给出的文档中找到runUntilCurrent和doSelect方法
你看起来不够配合:D尝试下次搜索所有modules and class documents。
2)
reactor.iterate()
取代doSelect()
。
他们似乎都做了类似的事情,但我认为他们不打算做替补。希望扭曲的核心开发人员会看到这个问题,如果我错了,请纠正我。