Алгоритмы, Наработки и Способности
Способ реализации:
Lua
Тип:
Алгоритм
Версия Warcraft:
1.31+
Функция позволяет перемещать юнита без дёрганья, при перемещении идет скольжение вдоль непроходимых участков.
	---@param source unit
	---@param x real
	---@param y real
	function SetUnitPositionSmooth(source, x, y)
		local last_x = GetUnitX(source)
		local last_y = GetUnitY(source)
		local bx
		local by

		SetUnitPosition(source, x, y)

		if (RAbsBJ(GetUnitX(source) - x) > 0.5) or (RAbsBJ(GetUnitY(source) - y) > 0.5) then

			SetUnitPosition(source, x, last_y)
			bx = RAbsBJ(GetUnitX(source) - x) <= 0.5
			SetUnitPosition(source, last_x, y)
			by = RAbsBJ(GetUnitY(source) - y) <= 0.5

			if bx then
				SetUnitPosition(source, x, last_y)
			elseif by then
				SetUnitPosition(source, last_x, y)
			else
				SetUnitPosition(source, last_x, last_y)
			end

		end
	end
jass версия
function SetUnitPositionSmooth takes unit source, real x, real y returns nothing
    local real last_x = GetUnitX(source)
    local real last_y = GetUnitY(source)
    local boolean bx
    local boolean by

    call SetUnitPosition(source, x, y)

    if (RAbsBJ(GetUnitX(source) - x) > 0.5) or (RAbsBJ(GetUnitY(source) - y) > 0.5) then
        
        call SetUnitPosition(source, x, last_y)
        set bx = RAbsBJ(GetUnitX(source) - x) <= 0.5
        call SetUnitPosition(source, last_x, y)
        set by = RAbsBJ(GetUnitY(source) - y) <= 0.5
        
        if bx then
            call SetUnitPosition(source, x, last_y)
        elseif by then
            call SetUnitPosition(source, last_x, y)
        else
            call SetUnitPosition(source, last_x, last_y)
        endif

    endif
endfunction
пример работы можно увидеть тут, примерно с минуты видео
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
29
4 года назад
0
Неплохо бы карту пример, а то непонятно как её использовать.
0
26
4 года назад
0
вместо обычного SetUnitPosition
0
29
4 года назад
0
Hate:
вместо обычного SetUnitPosition
Вместо обычного плавность никто не заметить.
0
26
4 года назад
0
NazarPunk:
Hate:
вместо обычного SetUnitPosition
Вместо обычного плавность никто не заметить.
ты серьезно щас? хоть когда нибудь перемещение делал как в рпг?
0
29
4 года назад
Отредактирован nazarpunk
0
ты серьезно щас? хоть когда нибудь перемещение делал как в рпг?
Делал, на мемхаке двигал невидимого юнита, за курсором, за которым бежал основной юнит. Вообще без проблем.
0
26
4 года назад
0
ну вот попробуй обычного юнита двигать через клавиши через сет позишн. увидишь очень много интересного
2
23
4 года назад
2
все верно! Даже 2D обьект чекает позиции рядом с столкновении и делает гладкую сглаживание. Иначе дергание. Суть математическая формула с колайдеров
0
32
4 года назад
0
SetUnitPosition и так не дает запихать в непроходимое место или за границы карты, он и так скользит если коллижены не выключены.
1
26
4 года назад
1
quq_CCCP:
SetUnitPosition и так не дает запихать в непроходимое место или за границы карты, он и так скользит если коллижены не выключены.
ты не прав
3
32
4 года назад
3
Забрал себе, реально очень помогло, персонаж стал скользить вдоль стены
2
27
3 года назад
2
Спасибо большое, хорошая вещь)
3
32
3 года назад
3
rsfghd, Можешь добавить Jass версию, если не сложно, мб кому пригодится
Спустя 2 года скажу, что использовал эту штуковину уже в 5 проектах, работает как часы
2
17
3 года назад
2
Да, хорошая наработка, да а что тут переносить, 1 функция и 2 ифа
2
27
3 года назад
2
Bergi_Bear, куда мне её добавить? xD
в комменты максимум, хотя тут и без джасса предельно всё понятно
0
32
3 года назад
Отредактирован Берги
0
rsfghd, у тебя под есть права на редактирование, сделай под катом
Jass версия
//тут код
Чтобы оставить комментарий, пожалуйста, войдите на сайт.