XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
agentex

offline
Опыт: 34,834
Активность:
Будет ли десинк?
if GetLocalPlayer()==p then
  set k1 = SquareRoot((GetCameraTargetPositionX()-GetCameraEyePositionX())*(GetCameraTargetPositionX()-GetCamer​aEyePositionX())+(GetCameraTargetPositionY()-GetCameraEyePositionY())*(GetCameraTargetPositionY()-Ge​tCameraEyePositionY()))
  set d = SquareRoot((x-GetCameraTargetPositionX())*(x-GetCameraTargetPositionX())+(y-GetCameraTargetPositionY​())*(y-GetCameraTargetPositionY()))
  if d<=k1 then
    set a = false
  endif
endif
k1, d, a -локалки.
Старый 13.10.2009, 20:38
Enein
Silenced by ZlaYa1000
offline
Опыт: 43,453
Активность:
а почему бы и нет? возможно ошибаюсь, но получается ведь так - у игрока p переменные k1, d и a имеют значения, отличные от этих же переменных на других машинах. идет сравнение... => десинк
Старый 13.10.2009, 20:49
agentex

offline
Опыт: 34,834
Активность:
Enein, да нет, не факт
переменные то присваиваются у всех а не только у локал плеераъ
не знаю вообщем.. НО без доступа из под локала к локалкам не обойтись никак
Старый 13.10.2009, 20:50
Sebra

offline
Опыт: 5,603
Активность:
Так весь вопрос в том, что ты с этими локалками делать будешь.
Вдруг создашь мага по координатам(a,d)
Старый 13.10.2009, 21:28
agentex

offline
Опыт: 34,834
Активность:
Вдруг создашь мага по координатам(a,d)
a - булин вощето
разумеется нет, вне локалплеера я оперирую только с a, а именно проверяю true ли она.. собственно все.
Старый 13.10.2009, 21:32
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
не должно если это не приведет в последствии к недопустимым локально операциям с хендлами итп =)
Старый 13.10.2009, 21:52
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
agentex, если ты a проверишь также для локального игрока и не будешь создавать хендлов (ну я думаю ты понял =)), то все будет ОК, если ты затеешь проверку а для всех игроков - десинк.
Старый 13.10.2009, 22:12
agentex

offline
Опыт: 34,834
Активность:
конечно проверка идет для всех игроков, смысл делать ее для одного игрока? мне от локал плеера нужны нужны только координаты камеры, если кто еще не понял
Старый 13.10.2009, 22:14
Sebra

offline
Опыт: 5,603
Активность:
Так скажи, что ты хочешь делать с А?
Что-то отображать или что-то менять?
Старый 13.10.2009, 22:31
agentex

offline
Опыт: 34,834
Активность:
я уже сказал.. я проверяю истинна ли она дальше по коду
Старый 13.10.2009, 22:41
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
agentex, ну, значит будет десинк. Сам посуди: у 1 игрока a==true, а у остальных a==false.
Старый 13.10.2009, 23:29
agentex

offline
Опыт: 34,834
Активность:
и что делать?
Старый 13.10.2009, 23:30
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
agentex, хоть твои действия и туманны, но почему нельзя локально проверить значение, а потом сделать действие. Что-то типо:
	local string path=""
	local integer index=0
	loop
		exitwhen index>=12
		if GetLocalPlayer()==Player(index) then
			if a then
				set path="MEGA_SKELETON.mdx"
			endif
		endif
		index=index+1
	endloop
	AddSpecialEffect(path,0,0)
Сам понимаю, что нагородил какой-то бред с циклом, но что-то нормальное никак не лезет =)
Старый 13.10.2009, 23:57
agentex

offline
Опыт: 34,834
Активность:
там цикл и есть вокруг этого всего) и в каждой итерации p присваивается игрок Player(i).
а у тебя path то присваивается только для локалплеера опять же, а потом вне его используется)
Старый 14.10.2009, 00:01
Enein
Silenced by ZlaYa1000
offline
Опыт: 43,453
Активность:
а вот интересно, сверка данных выполняется после каждого действия?
т.е. допустим есть integer x = 0, для локал плеера делаю x = 1, выполняю действия с x'ом (пусть для всех игроков), и в конце возвращаю исходное значение, т.е. 0
Enein добавил:
хм, наверное да...
Старый 14.10.2009, 00:10
agentex

offline
Опыт: 34,834
Активность:
дело в том что вроде как сверки идут постоянно, но десинк происходит именно из-за операций над обьектами \ значениями игроков, на локалки это не распространяется. Проблема в другом - как дать понять всем машинам что надо юзать правильное a?
Старый 14.10.2009, 00:15
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
agentex, как тебе идея сделать a массивом?
Старый 14.10.2009, 01:15
SRes
1110101000
offline
Опыт: 9,997
Активность:
Любые локальные действия с хендлами (да, уже сказали, знаю) вызывают дисинх, действия с переменными, которые не влияют на игровой процесс не вызывают дисинх. Т.е., если ты хочешь локально оперировать камерой при помощи переменных (например выставлять в разные позиции относительно), то это можно не синхронизировать. Ибо сама камера не синхронизируется. А вот если ты подвинешь\создашь\удалишь\убьешь\etc хендл, то дисинх тебе обеспечен.
Ах да, переменные НЕ синхронизируются никоим образом, сами по себе.
Старый 14.10.2009, 09:34
agentex

offline
Опыт: 34,834
Активность:
SRes, откуда инфа? варку дизасмил?
Hellfim, меня посещала такая мысля, но опять же, элемент запишется только для локального игрока, а у других он останется тем же)
Старый 14.10.2009, 13:17
SRes
1110101000
offline
Опыт: 9,997
Активность:
Нет, к сожалению я до такого еще "не дорос", но это основано на фактах, я делал манипуляции с камерой локально, относительно локальной переменной ( у каждого игрока она была своя, без массивов или т.п.), дисинха не наблюдалось, все отлично. Тут главное не работать с хендлами (всеми ли ? все ли хендлы каким-то образом проверяются на целостность ?) локально. А вообще - могу провести серию тестов, если кто желает...
Старый 14.10.2009, 15:43
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 01:49.