Я пытаюсь сделать многопользовательскую веб-игру, у меня есть сервер на python. Так как игра многопользовательская, мне нужно обновить каждого игрока индивидуально; Это требует циклов for
, в настоящий момент мой код использует много циклов for, что вызывает нежелательные побочные эффекты. Побочные эффекты включают замедленную скорость. Еще одна проблема, с которой я сталкиваюсь с циклами for, заключается в том, что они меняют скорость в зависимости от того, через сколько объектов они проходят; Это вызывает проблемы с тем фактом, что количество элементов, которые должен пройти цикл в цикле, изменяется в зависимости от того, сколько игроков подключено, таким образом путая функцию предсказания на стороне клиента, которую я сделал, чтобы скрыть отставание.
Это мой основной код:
PlayerData = {}
for Player in Players:
if(Player.id > 50):
PlayerData['playerx' + str(Player.id)] = Player.x
PlayerData['playery' + str(Player.id)] = Player.y
PlayerData['playera' + str(Player.id)] = int(Player.angle)
PlayerData['playerstat' + str(Player.id)] = Player.alive
if(Player.id > 50):
if(Player.alive == 0):
Players.remove(Player)
for ID in clientIds:
PlayerData['id'] = str(clientIds[len(clientIds) - 1].id)
PlayerData['players'] = ids
if(Player.id <= 50):
hrIds.append(Player.id)
PlayerData['hx' + str(Player.id)] = Player.x
PlayerData['hy' + str(Player.id)] = Player.y
#PlayerData['ha' + str(Player.id)] = int(Player.angle)
PlayerData['hr'] = hrIds
PlayerJsonData = json.dumps(PlayerData)
await websocket.send(PlayerJsonData)
recivedData = await websocket.receive()
rData = json.loads(recivedData)
for ID in clientIds:
if(rData['id'] == str(ID.id)):
if(ID.IG == 0):
if(rData['playerstat'] == 1):
Players.append(player_classes.Basic(-1300, -1300, ID.ws, ID.id, 1))
ID.IG = 1
for Player in Players:
for Player2 in Players:
if(Player.id > 50):
Player.detect_collide(Player2)
if(rData['id'] == str(Player.id)):
if(rData['direction'] == "up"):
Player.accelerate(rData['direction'])
Player.moveUp(Player2)
if(rData['direction'] == "left"):
Player.accelerate(rData['direction'])
Player.moveLeft(Player2)
if(rData['direction'] == "down"):
Player.accelerate(rData['direction'])
Player.moveDown(Player2)
if(rData['direction'] == "right"):
Player.accelerate(rData['direction'])
Player.moveRight(Player2)
if(rData['direction'] == "none"):
Player.decelerate(rData['direction'])
РЕДАКТИРОВАТЬ: моя основная проблема скорости зацикливания происходит, когда я добавляю больше классов в Players