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, время: 06:41.

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