Показать сообщение отдельно
Непрочитано 30.01.2017, 13:21   #2
Аватар для n3k0nation
Antihero

По умолчанию Re: Расчет координат в момент передвижения.

Для Lineage 2 не рекомендуется считать с момента startingTime, ибо путь может быть криволинейным, из-за той же высоты. Сейчас Вы строете четкую прямую из A в B, но таких методов передвижения в игре почти не существует.
Рекомендую с некоторой переодичностью обновлять оригинальные координаты и считать текущую точку уже с момента обновления, и прошедшем времени движения с точки обновления. Небольшой снипет:
Код:
		long timeNow = System.currentTimeMillis();
		double complete = getSpeed(actor, isWalk) * (timeNow - moveModel.getPrevUpdateTime());
		double divider = complete / moveModel.getEndMovePoint().getDistance3(actor.getLocation());
		moveModel.setPrevUpdateTime(timeNow);
		
		if(divider >= 1) {
			if(!this.moveModel.compareAndSet(moveModel, null))
				return;
			
			actor.set(moveModel.getEndMovePoint());
			completeMove();
			return;
		}
			
		int dx = moveModel.getEndMovePoint().getX() - actor.getX();
		int dy = moveModel.getEndMovePoint().getY() - actor.getY();
		int dz = moveModel.getEndMovePoint().getZ() - actor.getZ();
		
		int x = actor.getX() + (int)Math.round(divider * dx);
		int y = actor.getY() + (int)Math.round(divider * dy);
		int z = actor.getZ() + (int)Math.round(divider * dz);
		
		actor.setXYZ(x, y, z);
В любом случае, в снипете все есть и можно переделать под поставленную задачу, без учета моих рекомендаций

P.S: Либо все тоже самое можно проделать с помощью векторов, используя вычитание, сложение, нормализацию и умножение векторов.
__________________
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
n3k0nation вне форума Ответить с цитированием