BGEM
|
|
SStrelok | Дата: Вторник, 01 Мая 2018, 15:02 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Можно ли сделать так чтобы отправлялись не только координаты, но и угол(orientation)?? server
Код def send(self): scene = logic.getCurrentScene() statp= {(gobj.name, gobj["user"].name): list(Vector(gobj.worldPosition)) for gobj in scene.objects if gobj.name== "pl"} for addr in self.addr_user: self.socket.sendto(pickle.dumps(statp), addr)
client
Код def receive(self): while True: try: data, addr= self.socket.recvfrom(1024) state = pickle.loads(data)
for k in state: if not k in self.entities: scene= logic.getCurrentScene() spawner = scene.objects["Spawner"] smap = scene.objects["Smap"] entity = scene.addObject("pl", spawner) entity.children[0]["Text"] = k[1] self.entities[k] = entity else: entity = self.entities[k] entity.worldPosition = Vector(state[k])
Сообщение отредактировал SStrelok - Вторник, 01 Мая 2018, 15:03 |
|
| |
DivES | Дата: Вторник, 01 Мая 2018, 16:40 | Сообщение # 2 |
заслуженный участник
Сейчас нет на сайте
| Код statp= {(gobj.name, gobj["user"].name): list(Vector(gobj.worldPosition)) for gobj in scene.objects if gobj.name== "pl"} Тут же мы заполняем словарь для всех объектов на сцене? На выходе получается что-то вроде "имя_объекта : позиция". Однако последние две строчки с циклом мне не ясны Ну и вот. Дополнить конструкцию таким образом - "имя_объекта : [позиция, ориентация]". И тогда клиент принимал бы worldPosition как Vector(state[0][k]), а ориентацию как Vector(state[1][k]).
|
|
| |
SStrelok | Дата: Вторник, 01 Мая 2018, 17:22 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| DivES, делал уже так Выдает ошибку:Код _pickle.PicklingError: Can't pickle <class 'Vector'>: attribute lookup Vector on builtins failed Где то читал что нужно Vector в список превратить, c этим я малость туплю :D Хотя он становиться списком в этой строчке Код statp= {(gobj.name, gobj["user"].name): list(Vector(gobj.worldPosition))
Сообщение отредактировал SStrelok - Вторник, 01 Мая 2018, 17:27 |
|
| |
DivES | Дата: Вторник, 01 Мая 2018, 17:27 | Сообщение # 4 |
заслуженный участник
Сейчас нет на сайте
| SStrelok, ну вот эта функция превращает в список же)
Код list(Vector(gobj.worldPosition))
UPD: А то же самое для ориентации проделывал?
Сообщение отредактировал DivES - Вторник, 01 Мая 2018, 17:31 |
|
| |
SStrelok | Дата: Вторник, 01 Мая 2018, 17:35 | Сообщение # 5 |
был не раз
Сейчас нет на сайте
| DivES, Да ,делал там нужно матрицу в вектор превратить
добавил функцию list в Код self.socket.sendto(pickle.dumps(list(statp)), addr) и потенцивал с бубном сервер запустился без ошибки :D :D
UPD: Нужно теперь с clientom потенцевать
Ошибка клиента:Код tuple indices must be integers or slices, not tuple
Сообщение отредактировал SStrelok - Вторник, 01 Мая 2018, 18:09 |
|
| |
DivES | Дата: Вторник, 01 Мая 2018, 19:14 | Сообщение # 6 |
заслуженный участник
Сейчас нет на сайте
| SStrelok, Цитата SStrelok ( ) Ошибка клиента: Это на что такое реакция?
|
|
| |
SStrelok | Дата: Вторник, 01 Мая 2018, 19:18 | Сообщение # 7 |
был не раз
Сейчас нет на сайте
| DivES, Вот на это Код state= {(gobj.name, gobj["user"].name): [Vector(gobj.worldPosition),Vector(gobj.orientation.to_euler())] Нужно теперь правильно обратиться. Print выводит так : {('Player', 'Name'): [Vector((-11.0, -7.0, 3.0)), Vector((0.0, 0.0, -3.141592264175415))]}
|
|
| |
DivES | Дата: Вторник, 01 Мая 2018, 19:32 | Сообщение # 8 |
заслуженный участник
Сейчас нет на сайте
| SStrelok, Цитата SStrelok ( ) Код {('Player', 'Name'): [Vector((-11.0, -7.0, 3.0)), Vector((0.0, 0.0, -3.141592264175415))]} Ну если обращаться к объектам словаря через k, то положение это state[k][0], ориентация - state[k][1]
|
|
| |
SStrelok | Дата: Вторник, 01 Мая 2018, 19:35 | Сообщение # 9 |
был не раз
Сейчас нет на сайте
| DivES, попрыгав с print я обнаружил что на клиент не идут координаты...
Код state= {(gobj.name, gobj["user"].name): [Vector(gobj.worldPosition),Vector(gobj.orientation.to_euler())] [('Avatar', 'Textd'), ('Avatar', 'Text')]
Код statp= {(gobj.name, gobj["user"].name): list(Vector(gobj.worldPosition)) {('Avatar', 'Textd'): [-11.0, -7.0, 3.0]}
|
|
| |
DivES | Дата: Вторник, 01 Мая 2018, 19:41 | Сообщение # 10 |
заслуженный участник
Сейчас нет на сайте
| SStrelok,
Код state= {(gobj.name, gobj["user"].name): [list(Vector(gobj.worldPosition)), list(Vector(gobj.orientation.to_euler()))] А если так? То есть, сначала формируем список из вектора, а уже потом создаём общий список позиции и ориентации)
Сообщение отредактировал DivES - Вторник, 01 Мая 2018, 19:45 |
|
| |
|
DivES | Дата: Вторник, 01 Мая 2018, 19:49 | Сообщение # 12 |
заслуженный участник
Сейчас нет на сайте
| SStrelok, в смысле полноценно работает сервер-клиент?)
|
|
| |
SStrelok | Дата: Вторник, 01 Мая 2018, 19:51 | Сообщение # 13 |
был не раз
Сейчас нет на сайте
| DivES, Да, теперь он ходит и поворачивает )))
|
|
| |
1GTV | Дата: Среда, 02 Мая 2018, 16:33 | Сообщение # 14 |
был не раз
Сейчас нет на сайте
| Хммм))) вот ещё вариантик как это можно было сделать
Код packet = {} for obj in scene.objects: if obj.name == "pl": data = {} data["pos"] = list(obj.worldPosition) data["rot"] = list(obj.worldOrientation.to_euler()) packet[obj.name] = data
for addr in self.addr_user: self.socket.sendto(pickle.dumps(packet), addr)
Сообщение отредактировал 1GTV - Среда, 02 Мая 2018, 16:33 |
|
| |