-
Постов
410 -
Зарегистрирован
-
Посещение
-
Победитель дней
16
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные Antonshka
-
-
-
Видео с демонстрацией всего происходящего в игре с момента активации опции, будет здесь весьма полезным.
-
Вот примерный пример эффекта, о котором я говорил
Спойлер -
11 часов назад, inaginary сказал:
Нету предложений
Я имел ввиду продвижения, не предложения. Как у тебя дела с написанием скрипта?
-
На самом деле мне кажется тема достаточно интересная, - плавное прямолинейное перемещение объекта из одной точки в другую в 3D пространстве с постоянной скоростью, не зависящей от расстояния (+ по желанию плавное ускорение в начале и плавное замедление в конце).
22 часа назад, inaginary сказал:не проще ли вместо того что бы изгаляться сделать это же но с ускорением, при этом с постоянной скоростью движения
Ускорение, оно же Velocity, не что иное как обычный множитель для координат, что с ним, что без него, - особой разницы нет. В обоих случаях эти 3 множителя (искусственно созданные или имеющиеся уже в игре) необходимо будет видоизменять и подстраивать под поставленную задачу.
Как у тебя обстоят дела, есть ли какие-либо продвижения?
Я закончил писать скрипт, проверил, работает.
-
10 часов назад, inaginary сказал:
не проще ли вместо того что бы изгаляться сделать это же но с ускорением, при этом с постоянной скоростью движения
Конечно так проще, но в том то и есть весь спортивный интерес, чтобы попытаться сделать примерно тоже, но без использования Velocity
9 часов назад, inaginary сказал:Если так хочется сделать, то почему бы не найти угол между точками, и потом сделать так же как в теме в которой мы сейчас пишем, я имею ввиду: (твой рисунок с моими дорисовками)
Если будет желание, то напиши полностью рабочий скрипт + видео к нему. Свой скрипт я уже почти дописал, и также в случае работоспособности, я выложу его здесь.
-
При способе, который ты используешь, не будет ли движение не прямолинейное?
СпойлерЗдесь на рисунке, координаты игрока X = 0, Z = 0, координаты точки назначения X = 10, Z = 2. Если начать одновременно прибавлять 1 к Z координате, и 1 к X координате, то после того как значение Z уже станет равным 2, прибавление к X координате всё ещё будет продолжаться, и как следствие получится не прямолинейное движение.
-
Понял твою идею, у меня немного другая.
Если доделаешь до конца и запишешь видео с результатом, по желанию конечно, - то будет очень даже неплохо.
Я также, в случае успеха, постараюсь записать видео и выложить скрипт.
-
1 час назад, inaginary сказал:
И как по твоей схеме должны обрабатываться расстояния меньше чем 60 метров?
Верно подмечено
Но, пусть будет так:
Если расстояние будет (к примеру) всего 20 метров, то игрок, не закончив плавное ускорение, остановиться.
Если расстояние будет (к примеру) всего 40 метров, то игрок, не закончив плавное замедление, остановиться.
Возможно что 30 метров, это слишком большое расстояние для плавного ускорения или замедления. Нужно посмотреть в игре, какое расстояние наиболее приемлемое. Должно получиться что-то похожее на человеческое перемещение, с плавным началом и с плавным концом, как в жизни.
До момента написания предыдущего сообщения я не знал как осуществить эту идею. Спросил у тебя ради спортивного интереса, наверно. Сейчас уже имею примерное представление необходимой работы, но пока что это всего лишь примерное представление.
-
1 час назад, inaginary сказал:
То что ты предлагаешь - полет с постоянной скоростью, реализовывается просто с прибавлением фиксированных значений к координатам
Если есть желание, то сделай наглядный пример написанного
Условия вот такие:
1 - Использовать можно только координаты X,Y,Z игрока и X,Y,Z точки назначения
2 - Скорость полёта должна быть одна и та же, для разных дистанций
3 - По возможности, сделать плавное увеличение скорости в начале, и плавное уменьшение скорости в конце
Плавное увеличение скорости должно происходить на протяжении первых (к примеру) 30 метрах пути, а плавное уменьшение скорости должно происходить на протяжении последних (к примеру) 30 метрах пути.
30 метров пути в начале и в конце - расстояние статичное, для любых дистанций.
-
1 час назад, ReWanet сказал:
Зачем добавлять в панель еще одну панель когда можно у первой панели сменить цвет?
Такова особенность CE, при работе с TabSheet.
-
Можно на TabSheet1 положить CEPanel1, растянув её по всей площади TabSheet1, а на CEPanel1 положить CEPanel2, растянув её по всей площади CEPanel1, затем изменить цвет CEPanel2.
-
Нормализовать угол поворота камеры можно также и следующим образом
Спойлерfld dword ptr [Value_360] fld dword ptr [Original_Game_Angle] fabs fprem fstp st(1) fstp dword ptr [Normalized_Angle]
fcos и fsin работают с радианами, поэтому для корректного их использования, необходимо конвертировать значение угла из градусов в радианы
Спойлерfld dword ptr [Value_360] fld dword ptr [Original_Game_Angle] fabs fprem fstp st(1) fdiv dword ptr [Degress_Converting_Value] fstp dword ptr [Normalized_Angle_Radians] Value_360: dd (float)360 Degress_Converting_Value: dd (float)57.29577951308232
Интересно было посмотреть на реализацию этого и предыдущего замыслов. Наверно это оттого что я и сам некогда недавно занимался этими же вопросами.
*Что если необходимо сделать плавное перемещение (полёт) игрока до некоторой точки в пространстве, используя при этом лишь только 3 координаты положения игрока и 3 координаты положения точки, при условии что скорость перемещения должны быть всегда одной и той же, как для малых дистанция, так и для больших. Так же по возможности необходимо сделать плавное увеличение и плавное уменьшение скорости полёта, например от 0 до 10 % пути, сделать плавное увеличение скорости, а от 90-100% пути сделать плавное уменьшение скорости, до 0.
Осилил бы такую задачу?
- 1
- 1
-
Вот такой ещё вариант:
Скрытый текст"RomeTW-BI.exe"+1817CB: 8B 45 8C - mov eax,[ebp-74] "RomeTW-BI.exe"+1817CE: D9 80 C4 00 00 00 - fld dword ptr [eax+000000C4] "RomeTW-BI.exe"+1817D4: D9 5D EC - fstp dword ptr [ebp-14] "RomeTW-BI.exe"+1817D7: 8B 45 F0 - mov eax,[ebp-10] // ---------- INJECTING HERE ---------- - jmp newmem newmem: mov [eax+0000027C],(loat)80 jmp returnhere // ---------- DONE INJECTING ---------- "RomeTW-BI.exe"+1817E3: 0F B6 45 0C - movzx eax,byte ptr [ebp+0C] //returnhere "RomeTW-BI.exe"+1817E7: 85 C0 - test eax,eax "RomeTW-BI.exe"+1817E9: 0F 84 DC 01 00 00 - je RomeTW-BI.exe+1819CB
-
Расчёт дистанции
Скрытый текстfld dword ptr [Map_Coord_X] //Map_Coord_X fsub dword ptr [rsi] //Player_Coord_X fmul st(0) fld dword ptr [Map_Coord_Y] //Map_Coord_Y fsub dword ptr [rsi+8] //Player_Coord_Y fmul st(0) faddp st(1),st(0) fsqrt fstp dword [AutoWalk_Distance]
Расчёт угла Player/Map
Скрытый текстfld dword ptr [Map_Coord_X]//Map_Coord_X fsub dword [rsi]//Player_Coord_X fstp dword [AutoWalk_BA_X_Diff] fld dword ptr [Map_Coord_Y]//Map_Coord_Y fsub dword [rsi+8]//Player_Coord_Y fstp dword [AutoWalk_BA_Y_Diff] fld dword ptr [AutoWalk_BA_Y_Diff] fld dword ptr [AutoWalk_BA_X_Diff] fpatan fstp dword ptr [AutoWalk_BA_Yaw]
Расчёт Player_Velocity X,Y
Скрытый текстcmp [Auto_Walk_Checker],#0 //Проверка активности опции je AutoWalk_not_Act cmp [AutoWalk_Distance],(float)2 //Проверка минимальной дистанции jle AutoWalk_not_Act cmp [Detect_Objects_Checker],#1 // Сигнализатор прикасания к объектам (1 - прикасание имеется, 0 - нет) jne @f fld dword ptr [AutoWalk_Yaw_Compensator] // Множитель для угла Yaw fadd dword ptr [AutoWalk_Yaw_Compensator_Multiply_1] // Множитель_1 множителя для угла Yaw fstp dword ptr [AutoWalk_Yaw_Compensator] @@: cmp [Detect_Objects_Checker],#1 je AutoWalk_Step_1 cmp [AutoWalk_Yaw_Compensator],(float)0 je AutoWalk_Step_1 jle AutoWalk_Step_1_Set_Zero fld dword ptr [AutoWalk_Yaw_Compensator] fsub dword ptr [AutoWalk_Yaw_Compensator_Multiply_2] // Множитель_2 множителя для угла Yaw fstp dword ptr [AutoWalk_Yaw_Compensator] jmp AutoWalk_Step_1 AutoWalk_Step_1_Set_Zero://AutoWalk_Step_1_Set_Zero mov [AutoWalk_Yaw_Compensator],(float)0 AutoWalk_Step_1://AutoWalk_Step_1 fld dword ptr [AutoWalk_BA_Yaw] // Угол Yaw между точкой назначения и точкой отправления fadd dword ptr [AutoWalk_Yaw_Compensator] fcos fstp dword ptr [AutoWalk_Yaw_Cos] //Косигус угла Yaw fld dword ptr [AutoWalk_BA_Yaw] fadd dword ptr [AutoWalk_Yaw_Compensator] fsin fstp dword ptr [AutoWalk_Yaw_Sin] //Синус угла Yaw fld dword ptr [AutoWalk_Speed] // Скорость ходьбы fmul dword ptr [AutoWalk_Yaw_Cos] fstp dword ptr [r9+rcx+40]//Plyer Velocity X fld dword ptr [AutoWalk_Speed] fmul dword ptr [AutoWalk_Yaw_Sin] fstp dword ptr [r9+rcx+48]//Plyer Velocity Y AutoWalk_not_Act://AutoWalk_not_Act
- 3
- 3
-
7 часов назад, Garik66 сказал:
@Antonshka, записал бы видео - было бы супер. Ну а код, по желанию конечно.
- 3
- 2
-
Можно сделать таким алгоритмом:
Необходимые данные:
- Координаты X,Y точки назначения (метка на карте, к примеру)
- Координаты X,Y точки отправления (игрок)
- Velocity X,Y точки отправления (игрок)
- Матрица вращения точки отправления (игрок), или же что лучше - готовый адрес параметра Yaw точки отправления (игрок)
- Матрица вращения камеры, или же что лучше - готовый адрес параметра Yaw камеры
- Адрес параметра, сигнализирующего о прикасании/столкновении точки отправления (игрок) к какому-либо объекту
Основной процесс расчёта:
1 - Расчет дистанции до точки назначения (метка на карте, к примеру). Значение дистанции необходима лишь для своевременного автоматического отключения/прерывания опции
2 - Расчет угла между точкой отправления (игрок) и точкой назначения (метка на карте, к примеру)
3 - Изменение Velocity X,Y точки отправления (игрок) по средствам Cos,Sin угла между точкой отправления (игрок) и точкой назначения (метка на карте, к примеру)
4 - Изменение Yaw точки отправления (игрок) по средствам угла между точкой отправления (игрок) и точкой назначения (метка на карте, к примеру)
5 - Изменение Yaw камеры по средствам угла между точкой отправления (игрок) и точкой назначения (метка на карте, к примеру)
* если в игре отсутствует готовый параметр Yaw точки отправления (игрок) или камеры, то необходимо будет делать извлечение параметра Yaw из матрицы, затем изменение извлеченного параметра Yaw, затем обратная конвертация параметра Yaw в матрицу
Обход препятствий:
При касании и только на протяжении касания точки отправления (игрок) к какому-либо объекту, во избежание застревания точки отправления (игрок), сразу же после касания, начинается принудительное увеличение угла между точкой отправления (игрок) и точкой назначения (метка на карте, к примеру), при этом движение точки отправления (игрок) не прекращается. После того как касание прекратилось начинается принудительное уменьшение угла между точкой отправления (игрок) и точкой назначения (метка на карте, к примеру) до того момента пока множитель изменения угла не будет равен нулю.
Протестировал эту схему вчера в игре "theHunter: Call of the Wild", работает на 4 из 5. Пробовал устраивать игроку разные препятствия в виде камней, домов и прочего, - со всеми игрок справился успешно.
- 2
- 1
x64 Проектный Minecraft делаем полёт по повороту камеры
in Статьи для новичков
Опубликовано
Перемещение объекта из точки А в точку Б, с постоянной скоростью, с плавным ускорением в начале и с плавным замедлением в конце, нашло себе успешное применение в эффекте приближения, при стрельбе из лука.