forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Движение объекта к игроку (http://forum.boolean.name/showthread.php?t=20767)

PHPenguin 13.05.2019 15:41

Движение объекта к игроку
 
Здравствуйте. В Blitz3D новичок, и вот не могу реализовать движение объекта к игроку, MoveEntity работает немного по-другому. В справочнике команд пытался найти нужную команду среди других, отвечающих за движение объекта, но как-то не особо помогло. Подскажите пожалуйста, как это правильно делается?

ARA 13.05.2019 18:30

Ответ: Движение объекта к игроку
 
Двигать объект в текущие координаты игрока? Насколько помню там еще есть TranslateEntity :)

PHPenguin 13.05.2019 21:02

Ответ: Движение объекта к игроку
 
Цитата:

Сообщение от ARA (Сообщение 316250)
Двигать объект в текущие координаты игрока? Насколько помню там еще есть TranslateEntity :)

Не совсем так, я не могу сделать реализацию именно движения в сторону игрока, т.е. например противник идет к нему издалека

ABTOMAT 13.05.2019 23:14

Ответ: Движение объекта к игроку
 
Цитата:

Сообщение от PHPenguin (Сообщение 316251)
Не совсем так, я не могу сделать реализацию именно движения в сторону игрока, т.е. например противник идет к нему издалека

Каждый кадр сдвигать понемножку в сторону игрока?

Arton 13.05.2019 23:29

Ответ: Движение объекта к игроку
 
MoveEntity отлично подходит, команда двигает по 3-м координатам относительно текущего положения объекта.
TranslateEntity двигает не зависимо от положения объекта.

AlignToVector — поможет повернуть бота в сторону игрока (выравнивание по вектору). Да и вообще что угодно по вектору из двух точек.

Есть ещё PointEntity, ему достаточно дать объекты он сам всё повернёт, но с этим были какие-то проблемы.

PHPenguin 13.05.2019 23:40

Ответ: Движение объекта к игроку
 
Цитата:

Сообщение от ABTOMAT (Сообщение 316252)
Каждый кадр сдвигать понемножку в сторону игрока?

Да, будто бы объект движется на меня

PHPenguin 13.05.2019 23:43

Ответ: Движение объекта к игроку
 
Цитата:

Сообщение от Arton (Сообщение 316253)
MoveEntity отлично подходит, команда двигает по 3-м координатам относительно текущего положения объекта.
TranslateEntity двигает не зависимо от положения объекта.

AlignToVector — поможет повернуть бота в сторону игрока. Да и вообще что угодно по вектору из двух точек.

Есть ещё PointEntity, ему достаточно дать объекты он сам всё повернёт, но с этим были какие-то проблемы.

У меня вот такой код:

Код:

TranslateEntity enemy, EntityX(Player)*.01, 0, EntityZ(Player)*.01
PointEntity enemy,Player

Но enemy двигается как ко мне, так и от меня, по-разному в общем

Arton 14.05.2019 00:01

Ответ: Движение объекта к игроку
 
Цитата:

Сообщение от PHPenguin (Сообщение 316255)
Код:

TranslateEntity enemy, EntityX(Player)*.01, 0, EntityZ(Player)*.01
PointEntity enemy,Player


Зачем умножать?

Я посмотрел свой старый код и вспомнил в чём разница:
PointEntity полностью поворачивает (условно «лицом») к указанному объекту по всем 3-м осям.
По этому у тебя враг не туда двигается.

AlignToVector
выравнивание по вектору, грубо говоря тоже, но ему настраиваешь каждую ось отдельно.
TranslateEntity уже сказал что он двигает независимо от ориентации объекта.

Правильнее будет так:
Код:

;Поворачиваем врага в сторону игрока в плоскости X, Z
AlignToVector enemy,EntityX(player,1) - EntityX(enemy,1),0,EntityZ(player,1) - EntityZ(enemy,1),3,.5
;Двигаем по Z
MoveEntity enemy,0,0,.01

+Z сторона это «лицо» объекта.

P. S. За подробностями команд в справку.

PHPenguin 14.05.2019 00:49

Ответ: Движение объекта к игроку
 
Цитата:

Сообщение от Arton (Сообщение 316256)
Зачем умножать?

Я посмотрел свой старый код и вспомнил в чём разница:
PointEntity полностью поворачивает (условно «лицом») к указанному объекту по всем 3-м осям.
По этому у тебя враг не туда двигается.

AlignToVector
выравнивание по вектору, грубо говоря тоже, но ему настраиваешь каждую ось отдельно.
TranslateEntity уже сказал что он двигает независимо от ориентации объекта.

Правильнее будет так:
Код:

;Поворачиваем врага в сторону игрока в плоскости X, Z
AlignToVector enemy,EntityX(player,1) - EntityX(enemy,1),0,EntityZ(player,1) - EntityZ(enemy,1),3,.5
;Двигаем по Z
MoveEntity enemy,0,0,.01

+Z сторона это «лицо» объекта.

P. S. За подробностями команд в справку.

Воо, работает на отлично! Спасибо)

mingw 14.05.2019 18:12

Ответ: Движение объекта к игроку
 
Оставлю свои 5 копеек.

Все вышепривиденные функции работают через матричное преобразование обьекта. А это является не совсем оптимальным вариантом.

Будет гораздо быстрее и грамотнее вычислить дельту угла без матричных преобразований. А уже в конце модифицировать матрицу объекта результирующими значениями.

Собственно именно для этих целей и существует две отличные функции, которые вычисляют дельту угла по нужной оси: - DeltaPitch() и DeltaYaw()


Часовой пояс GMT +4, время: 19:15.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot