Этот вопрос уже дал мне причину, ПОЧЕМУ эта ошибка происходит сейчас, я хочу знать, как решить эту проблему.
Вот код для main.py
from twisted.internet import reactor
import pygame
from networking import run, construct_factory
class GameEngine(object):
def __init__(self, client):
pygame.init()
self.screen = pygame.display.set_mode((640, 400))
self.FPS = 60
self.client = client.connectedProtocol
reactor.callWhenRunning(self.grab_all_sprites)
def grab_all_sprites(self):
with open('sprites.txt') as sprites:
for sprite in sprites:
sprite_file = self.client.download_sprite(sprite)
with open(r'resources\%s.png' % sprite, 'wb') as out:
out.write(sprite_file)
def spin(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
reactor.stop()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
print "spacebar!"
#update the player
pygame.display.flip()
reactor.callLater((1/self.FPS), self.spin)
if __name__ in '__main__':
client = construct_factory()
game = GameEngine(client)
run(game, client)
вот код для network.py
from twisted.internet import reactor
from twisted.internet.protocol import ClientFactory
from twisted.protocols import amp
import sys
from ampcommands import TransferSprite
class GameClient(amp.AMP):
def download_sprite(self, sprite):
self.callRemote(TransferSprite, sprite)
class GameClientFactory(ClientFactory):
protocol = GameClient
def buildProtocol(self, address):
proto = ClientFactory.buildProtocol(self, address)
self.connectedProtocol = proto
return proto
def construct_factory():
return GameClientFactory()
def run(game, factory, verbose=True):
if verbose:
from twisted.python import log
log.startLogging(sys.stdout)
reactor.connectTCP("localhost", 1234, factory)
reactor.callWhenRunning(game.spin)
reactor.run()
Я понятия не имею, как заставить game.spin
быть вызванным ПОСЛЕ соединения, чтобы GameClientFactory.connectedProtocol
. Я запутался и устал, кто-нибудь может найти лучший способ?