Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> реализовать движение персонажа до объекта
farlike
сообщение 25.11.2023, 12:46
Сообщение #1


*

Registred
Сообщений: 2
Регистрация: 25.11.2023
Группа: Пользователи
Наличность: 0
Пользователь №: 20.663
Возраст: 20



Нужно реализовать движение персонажа до объекта. Движение происходит за счет зажатия клавиши (wsad)

Идея такая, что с помощью findcolor нахожу координаты куда бежать персонажу, а потом зажать клавижу до тех пор пока он до нее не дойдет, но идею как это реализовать не пойму.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 28.11.2023, 16:19
Сообщение #2


***********

Модератор UOPilot
Сообщений: 9.595
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 28780
Пользователь №: 11.279



скорее findimage чем findcolor. А в чем вообще принципиальная проблема? Зажали, ждем появления точки/изображения, отжали. Код покажите любой кривости - подскажу по месту. Так очень сложно гадать в чем у вас проблема.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Писать в личку.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
farlike
сообщение 30.11.2023, 22:54
Сообщение #3


*

Registred
Сообщений: 2
Регистрация: 25.11.2023
Группа: Пользователи
Наличность: 0
Пользователь №: 20.663
Возраст: 20



Извиняюсь, очень сумбурно написал.
findcolor'a достаточно, цели имеют уникальный цвет, с их поиском проблем не возникло.

Камера привязана к персонажу(он всегда в этих координатах).
Код


--lua
log (1202, 573, 110, 100)

local heroX = 478
local heroY = 298


Есть функция по поиску нужного объекта, с ней все ок
Код

function getTargetPosition()

local x1, y1 = 478, 298
local x2, y2 = 478, 298
local count = 0

while true do
    local cottonPos = findcolor (x1, y1, x2, y2, 1, 1, [[('3232848')]], '%arr', 2, 10, 2)
    if  cottonPos then
        log(arr[1][1], arr[1][2])
        return arr[1][1], arr[1][2]
    else
       -- log('expand search')
        if  count < 400 then
            x1 = x1-1
            y1 = y1-1
            x2 = x2+1
            y2 = y2+1
            count = count +1
        else
            log('waiting spawn')
            wait(5000)
            x1,y1,x2,y2,count = 478,298,478,298,0
            end
           -- log(count)
        end
    end
end



Вот тут что-то не так (пока не берем во внимамние, что по оси Y движение не дописал. давайте рассмотрим хотябы что не так с движением по оси X)

Т.к. персонаж всегда в центре, то получается, что как бы не он сам движется, а мир вокруг него и хотелось, чтобы когда найдена цель - зажимались кнопки до тех пор, пока эта цель не окажется рядом с персонажем, но движения получаются прерывистыми и персонаж не останавливается, а бежит дальше

Код

function moveToTarget()
targetX, targetY = 0,0
while math.abs(heroX - targetX) > 50 or math.abs(heroX - targetY) > 50  do
    targetX, targetY = getTargetPosition()
    if  heroX < targetX then
        log('right')
        kleft_down(rightX, rightY)
    elseif heroX > targetX then
        log('left')
        kleft_down(leftX, leftY) -- т.к. send_down не работает, а send217_down некорректно  работает, то зажимаю на джойстик движения мышкой
    end

log('up')
kleft_up(leftX, leftY) -- отпускаю мышь
end

end


Если персонаж рядом с объектом, на экране появляется кнопка на которую нужно нажать, тут вроде тоже без проблем все
Код

while true do
    if color(755, 240) == 38358  then

        kleft(752, 253)
        wait(3000)
    else
       moveToTarget()
    end
end
Прикрепленное изображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 1.12.2023, 14:52
Сообщение #4


***********

Модератор UOPilot
Сообщений: 9.595
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 28780
Пользователь №: 11.279



Код
        if  count < 400 then
            x1 = x1-1
            y1 = y1-1
            x2 = x2+1
            y2 = y2+1
            count = count +1

Это очень жесткий метод поиска ближайшего итема. Столько финдов даст дикую нагрузку. Проще сделать один поиск в большой области и потом по теормеме пифагора вычислить дистанцию. Т.е. разница x и y координат по модулю у нас будут катетами треугольника, считаем гипотенузу - дистанция готова.


heroX - targetY
может вы не доделали Y координату, но так точно не должно быть в условии. Уберите лишнее. Визуально очень похоже, что проблема именно в этом.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Писать в личку.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
nykep
сообщение 2.12.2023, 6:42
Сообщение #5


****

Apprentice
Сообщений: 246
Регистрация: 1.9.2012
Группа: Пользователи
Наличность: 1355
Пользователь №: 15.246
Возраст: 25



если одинаковых цветов не очень много, то сделать как Darkmaster написал, а если много, то можно попробовать вот здесь
Код
        if  count < 400 then
            x1 = x1-1
            y1 = y1-1
            x2 = x2+1
            y2 = y2+1
            count = count +1

поменять на +-10, 20, вобщем найти оптимальный вариант при котором будет максимальная скорость и делать будет то что надо.
По перемещению мне кажется самый простой вариант сделать так :
- Поиск ближайшего
- Если объект выше, нажать вверх
Если ниже, нажать вниз и т. д. Это если одного нажатия достаточно для перемещения персонажа и по диагонали ходить не будет конечно. А если за одно нажатие персонаж почти не смещается, тогда пробовать sendex_down и всё равно надо заново проводить поиск после каждого небольшого смещения
- Повторять до тех пор пока на экране не появится кнопка(findcolor или findimage)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 1.11.2024, 2:38
Designed by Nickostyle