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=3793)

ABTOMAT 02.07.2007 14:05

Глюки с коллязиями.
 
Сделал террайн (стандартный Блитзевый), сделал игрока, игроку назначил Энтити-Радиус.
Прописал коллизии:

EntityType Player, TypePlayer ; Коллязия для игрока
EntityType level1, Typelevel ; Коллязия для террайна

Collisions TypePlayer,TypeLevel,2,3 ; Игрок сталкиваеццо с уровнем.
Collisions TypePlayer,TypeObjects,2,2 ; Игрок сталкивается с деревьями, зданиями и прочим.

Сделал гравитацию. Запустил игру, а там всё трясё-ё-о-оц-ц-о!!!

Примерно так:



Кто-нить знает отчего ето и как можно исправить? :dontknow:

johnk 02.07.2007 15:06

Re: Глюки с коллязиями.
 
Это наверно из-за гравитации. :)

Черный крыс 02.07.2007 15:33

Re: Глюки с коллязиями.
 
Известная проблемма. и....легко решаемая. =)

Horror 02.07.2007 16:08

Re: Глюки с коллязиями.
 
А что классно выглядит , какбуд то туалет танцует)

moka 02.07.2007 16:16

Re: Глюки с коллязиями.
 
У тебя гравитация отключается в моммент коллизии с ландшафтом?
Коллизия - вытесняет, и выходит что через раз - есть\нету колиизии, учитывай это.

ABTOMAT 02.07.2007 20:03

Re: Глюки с коллязиями.
 
Diablo1909, поведай же о решении траблы.

axel186 02.07.2007 22:44

Re: Глюки с коллязиями.
 
не уверен, но как ты гравитацию пишешь? так : MoveEntity Player,0,-1,0 ?

Просто более правельно писать вот так TranslateEntity Player,0,-1,0...

Надеюсь поможет...

ЛысыЙ_Чук-Иванчук 02.07.2007 23:42

Re: Глюки с коллязиями.
 
Решается так:
Даже если стоит большое значение гравитации он НЕ должен заходить в землю!!! это изза того что ReameWorld стоит после RenderWorld или наоборот=)

H@NON 03.07.2007 00:03

Re: Глюки с коллязиями.
 
What is a ReameWorld? I do not understand.

HolyDel 03.07.2007 01:23

Re: Глюки с коллязиями.
 
ето UpdateWorld он оимел ввиду.
RenderWorld никакого отношения к коллизиям не имеет.
2Автомат, забудь про стандартные блицевские коллизии (в проектах сербезнее demo по крайней мере), или юзай физ-двиги или математику+голову.

решение проблемы:
1. Посмотри в сторону МоКи.
2. исчи место в которому у тебя изменяется значение dy для игрока, проблема скорее всего там. ЗЫ. обычно такие проблемы встречаются при попытке реализовать прыжок, а так на месте :даже хз:

Horror 03.07.2007 11:26

Re: Глюки с коллязиями.
 
у меня гдетто так же было (не помню гдe)
ну вот я сделал так
Код:

если игрок колизится с полом то
транслейтентити игрок,0,0,0
елзе
транслейтентити игрок,0,-1,0
ендиф

ну как то так непомню)

moka 03.07.2007 12:18

Re: Глюки с коллязиями.
 
Хоррор, как-раз именно это и делает дёрги, я же уже сказал, что коллищиться будет Через Раз, тоесть при коллизии объект оттолкнётся, а потом гравитацией опять примкнётся, потом опять и опять, тоесть будет через раз: примкнул\оттолкнулся. Поэтому и дёрги. Нужно привязать скорость падения к переменной, которая будет изменятся не сразу: 1\0\-1, а постепенно, например при коллизии, уменьшать скорость падения до нуля, но не отменять гравитации от этой скорости.

Цитата:

2Автомат, забудь про стандартные блицевские коллизии (в проектах сербезнее demo по крайней мере), или юзай физ-двиги или математику+голову.
Полностью Согласен.

ABTOMAT 03.07.2007 20:06

Re: Глюки с коллязиями.
 
TranslateEntity? Ето что-то новенькое. Я писал

PositionEntity player, EntityX(player),EntityY(player) - (sv_gravity*dt), EntityZ(Player)

я немного по-другому решил траблу, но попробую Транслейтом.

HolyDel 04.07.2007 01:24

Re: Глюки с коллязиями.
 
PositionEntity player, EntityX(player)+dx,EntityY(player)+dy, EntityZ(Player)+dz
тожесамое что и
translateentity player,dx,dy,dz
меньше кода, возможно больше произвоительность (непроверял, поетому утверждать небуду)

ЛысыЙ_Чук-Иванчук 04.07.2007 01:33

Re: Глюки с коллязиями.
 
Что за народ, я говорю что хать там MoveEntity Lox,0,-100000,0 небудет разнецы, нет тут тунельного эфекта!
Короче так

UpdateWorld
RenderWorld

Готов поспорить что у тебя щяс вот-так:

RenderWorld
UpdateWorld

Поставь как я сказал и нече утебя не будет дергатся!!!!!!!

ABTOMAT 04.07.2007 09:52

Re: Глюки с коллязиями.
 
vlad, не, у меня как раз так:

UpdateWorld
RenderWorld

и при чём тут тунельный эффект?

johnk 04.07.2007 10:00

Re: Глюки с коллязиями.
 
А может так?

UpdateWorld()
RenderWorld()

Вдруг поможет

moka 04.07.2007 11:18

Re: Глюки с коллязиями.
 
Эх...
Выкладывай код применения гравитации к персонажу.

Никакой разницы что так:
UpdateWorld
RenderWorld
что так:
RenderWorld
UpdateWorld

Вообще UpdateWorld, это процесс технический, и его не нужно ставить рядом с рендерингом, т.к. Рендеринг нужно ограничивать если УПС (UPS - Update Per Second, пройденый технический цикл (Не Рендер)), ниже например 60.

Ещё раз говорю:
Цитата:

коллищиться будет Через Раз, тоесть при коллизии объект оттолкнётся, а потом гравитацией опять примкнётся, потом опять и опять, тоесть будет через раз: примкнул\оттолкнулся. Поэтому и дёрги.

HolyDel 05.07.2007 02:10

Re: Глюки с коллязиями.
 
еще раз говорю:
Цитата:

1. Посмотри в сторону МоКи.
ето имеется ввиду именно первый его пост.;)

Цитата:

Вообще UpdateWorld, это процесс технический, и его не нужно ставить рядом с рендерингом, т.к. Рендеринг нужно ограничивать если УПС (UPS - Update Per Second, пройденый технический цикл (Не Рендер)), ниже например 60.
лишнее.

1. UpdateWorld - пересчитывает коллизии и переставлят объекты туда, где они должны стоять по мненю движка. отсюда следует что алгоритм для правильной отрисовки должен быть таким:
ставим объекты так_как_хотим_мы
провреям коллизии чтоб объекты стояли так как_думает_движок
рисуем все_ето.
почему прыгает:
1. коллидится не через раз, коллидится все время когда игрок ПЕРЕСЕКАЕТ треррайн (другое дело, что он его персекает через раз), дело в том что он у тебя не всегда персекается (если ето происходит при движении то еще все понятно, но если ето проиходят прыжки на месте - мне лично непонятно в чом тут дело, какая сила заставляет).

alcoSHoLiK 05.07.2007 02:42

Re: Глюки с коллязиями.
 
Нафига такой гемор с PositionEntity? Ты делаешь 4 вызова функций за раз, когда можно сделать один Move(Translate)Entity. Причем PositionEntity может игнорировать коллизии. В этом случае, если объект переместился под землю, он может не сразу выбраться оттуда. При использовании Move(Translate)Entity объект остановится перед преградой. Могут еще возникнуть проблемы с гравитацией, если она криво сделана.

BlackDeath 09.09.2007 23:52

Re: Глюки с коллязиями.
 
На сколько мне помнится я когда-то уже с таким сталкивался. Решал просто, помоему так, но могу ошибаться, надо пробывать:

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


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

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