forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   PositionEntity = MoveEntity (http://forum.boolean.name/showthread.php?t=3140)

stone_evil 10.04.2007 07:17

PositionEntity = MoveEntity
 
Недавно столкнулся с такой фичей, может кто не знает, будет полезно иметь ввиду.
Всегда считал, что MoveEntity - это передвижение объекта по прямой, а PositionEntity - позиционирование объекта в какой-то точке. Оказывается не все так просто, PositionEntity то же самое перемещение по прямой, только указываем конечный пункт назначения, а не векторы передвижения.
К примеру, если вы захотите перепозиционировать объект, имеющий некоторые коллизии, и на пути перемещения этого объекта при использовании PositionEntity будут эти самые коллизии, то они самым прямым образом повлияют на вектор движения объекта, и он окажется не там, где вам хотелось бы его видеть.
Вотъ.

Progger_Leo 10.04.2007 10:42

Re: PositionEntity = MoveEntity
 
Знаю. Было такое, когда делал игру в топике "Совместное занятие =)". Я тогда думал, что это я ошибся, оказыватся не. :-)

Platon 10.04.2007 11:11

Re: PositionEntity = MoveEntity
 
Да нет, это не тоже что и перемещение, это просто специфика работы коллизионной системы такая - проверка ентитей происходит с старыми координатами, а новые уже после этого применяются.
Так что разница есть:
либо присвоить координаты в PositionEntity()
либо прибавить координаты в TranslateEntity() или с учетом ориентации в MoveEntity()
В обход этого можно отключать коллизию перед перемещением
EntityType(Энтити, Неиспользуемый_номер_коллизий)
PositionEntity(Энтити,...)
EntityType(Энтити, Номер_коллизии_Энтити)

stone_evil 10.04.2007 11:46

Re: PositionEntity = MoveEntity
 
Не понял, как может происходить проверка энтити со старыми координатами, если в момент перемещения энтити вообще ни с чем не колизится, и колизиционные объекты находятся совсем не рядом, а лишь на линии перемещения из точки А в точку Б, но суть не в этом: да, верное решение - применение EntityType.

Platon 10.04.2007 17:27

Re: PositionEntity = MoveEntity
 
Ты непонял, проверка коллизий происходит до перемещения ентити в новые координаты, а потом уже по результатам проверки происходит перемещение обьекта на новый вектор в соотвествии с коллизиями, вроде того:
Пользователь: установка новые_координаты
Движок:проверка коллизий по вектору старые_коордианты->новые_коордианты

Движок:по вектору есть препятствие => установка новые_коордианты
ИЛИ
Движок:по вектору нет препятствий

Движок:перемещаю ентити в новые_коордианты
:-)

Черный крыс 10.04.2007 17:30

Re: PositionEntity = MoveEntity
 
тоже в свое время столкнулся с это особенностью блитца....=) - При загрузке уровня и расстановке обьектов - присваиваем им Entitytype(), и потом тока в самом конце загрузки устанавливаем коллизии. Ну а как передвинуть обьект в цикле....то это хорошо рассказал Платон.

tormoz 10.04.2007 19:55

Re: PositionEntity = MoveEntity
 
Я уже так привык к этой фигне. что не замечаю ее :)


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

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