Итак, начал изучать модуль socket, и чтобы вылезти из скучной консоли, решил набросать клон агарио с мультиплеером.
так вот, у меня есть клиент, который отправляет вектор своего двжиения на сервер в формате ,
на сервере специальная функция, обрабатывает эту форму, и возвращает список формата (X, Y)
def find(s):
otkr = None
for i in range(len(s)):
if s[i] == '<':
otkr=i
if s[i] == '>' and otkr != None:
zakr = i
res = s[otkr+1:zakr]
res = list(map(int, res.split(',')))
return res
далее с помощью метода класса Player, созданного мной для хранения данных о подключенных пользователей, я заставляю шарик двигаться по нормализованному вектору (этот термин я узнал буквально недавно, но подумал, что стоит об этом рассказать)
def change_speed(self, v):
if (v[0] == 0) and (v[1] == 0):
self.speed.x = 0
self.speed.y = 0
else:
lenv = (v[0]**2 + v[1]**2) ** 0.5
v = (v[0]/lenv, v[1]/lenv)
v = (v[0]*self.abs_speed, v[1]*self.abs_speed)
self.speed_x, self.speed_y = v[0], v[1]
и всё двигается, но вот проблема в том, что двигается не бесконечно по вектору, а только до курсора мыши (а мне нужно чтобы шарик летел бесконечно по направленной)
код класса Player:
class Player:
def __init__(self, conn, addr, x, y, r, colour):
self.conn = conn
self.addr = addr
self.x = x
self.y = y
self.r = r
self.colour = colour
self.errors = 0
self.speed_x = 0
self.speed_y = 0
self.abs_speed = 10
def update(self):
self.x += self.speed_x
self.y += self.speed_y
def change_speed(self, v):
if (v[0] == 0) and (v[1] == 0):
self.speed.x = 0
self.speed.y = 0
else:
lenv = (v[0]**2 + v[1]**2) ** 0.5
v = (v[0]/lenv, v[1]/lenv)
v = (v[0]*self.abs_speed, v[1]*self.abs_speed)
self.speed_x, self.speed_y = v[0], v[1]