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

KRIK 01.04.2008 13:03

Правельно распределить
 
Люди! Может кто знает где информацию почитать или может сам кто-нить напишет как правильно распределять типы коллизий для мира в игре и вообще как правильно распределить объекты в игре к нужным типам. Например, чтобы не получилось так, чтобы человек мог лазить по стенкам, словно человек паук. Если кто не понял, могу более понятно написать))))

H@NON 01.04.2008 13:09

Ответ: Правельно распределить
 
чтобы человек не лазил постенкам можно написать простенький код, типо:
colY# = CollisionY(player, n) - EntityY( player, 1 )
If colY# < 0 then
; тут код чтобы человечек мог перемещатся
EndIf
Объясняю, CoY возвратит место в мировых координатах на коллизионной сфере где было столкновение, так можно определить есть ли земля под ногами у игрока.

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

HolyDel 01.04.2008 14:45

Ответ: Правельно распределить
 
Hanon, false. все равно сможет лазить. например прыжог зажмет. или еще как изловчиться. какие еще есть предложения? (я не смог победить ету проблему пару лет назад).

tormoz 01.04.2008 15:14

Ответ: Правельно распределить
 
Это довольно сложно
Каждый решает по-своему.
Например у меня две сферы коллизии - одна в ногах для гравитации, другая на корпус для стен.
И жутко замученный код для совмещения всего этого.
Для начинающего пойдет и примитивный с лазаньем по стенам.
все равно он нифига не поймет, выложи я сейчас исходник (я порой сам не пойму что я там понаписывал :)))))

H@NON 01.04.2008 16:31

Ответ: Правельно распределить
 
Цитата:

Сообщение от HolyDel (Сообщение 78894)
Hanon, false. все равно сможет лазить. например прыжог зажмет. или еще как изловчиться. какие еще есть предложения? (я не смог победить ету проблему пару лет назад).

у меня все пашет, на прыжок делаю условие, если есть коллизия в ногах, то только тогда можно прыгать, плюс юзаю такую конструкцию( это когда тип коллизии стоит Collisions player, level, 2, 3 ), чтобы плеер, если поднялся на стенку, то съезжал оттуда обратно:
Код:

For n = 1 To CountCollisions( player(1)\entity )
            coly = CollisionY(player(1)\entity, n)-plY
            If coly < nogi Then
                nx = 0
                nz = 0
                Exit
            Else
                nx = nx + CollisionNX(player(1)\entity, n)
                nz = nz + CollisionNZ(player(1)\entity, n)
            EndIf
        Next
        nx = nx / CountCollisions( player(1)\entity )
        nz = nz / CountCollisions( player(1)\entity )

TranslateEntity( player(1)\entity, nx * 0.02, Gravity, nz * 0.02, 1 )

Там есть еще продолжение, потому что в таком случае исчезнет один лаг, и появится новый, я его поборол но черезжопно.

moka 01.04.2008 18:05

Ответ: Правельно распределить
 
Юзаю PhysX, хотя и нативной коллизией не сложно реализовать.
В общем принцип таков:
1. Определяешь стоит ли персонаж (стоит ли на ногах).
2. Исходя из этого (True/False), уже реализуешь управление персонажем.

Как вычислить стоит ли. Ну вопервых координата коллизии, должна быть в радиусе ног (можно тупо к координате Y прицепить).
Второе, нужно определить вектор коллизии (CollisionN[X/Y/Z]). Перевести в градус и сделать ограничение. Если градус на 50-100% паралелен вертикали гравитации - то перс стоит, в обратном случае, он уже не стоит а скользит или т.п.

Таким образом я делаю коллизию, выходит весьма шустро и без проблем нормально работает :)

KRIK 01.04.2008 19:19

Ответ: Правельно распределить
 
2Moka довольно интересный подход.. Только я немного про вектор коллизии не понял, а именно каким образом определить. Если я правельно понимаю то нада определять вектор относительно места прыжка?

H@NON 01.04.2008 19:20

Ответ: Правельно распределить
 
вот именно это скольжение и вызвало у меня затруднения. Так как реакцию на коллизию оказывается нельзя менять после того как один раз задал, поэтому приходится писать свой алгоритм скольжения.

KRIK 01.04.2008 19:35

Ответ: Правельно распределить
 
H@NON! Я конеш не супер блитсер, но вот что я нашёл в справке по поводу Collisions. Разве это не смена коллизиии???

Код:

.....

; Change collision method
If KeyHit( 50 )=True
method=method+1
If method=4 Then method=1
If method=1 Then method_info$="ellipsoid-to-sphere"
If method=2 Then method_info$="ellipsoid-to-polygon"
If method=3 Then method_info$="ellipsoid-to-box"
EndIf

; Change collision response
If KeyHit( 19 )=True
response=response+1
If response=4 Then response=1
If response=1 Then response_info$="stop"
If response=2 Then response_info$="slide1"
If response=3 Then response_info$="slide2"
EndIf

.....


HolyDel 01.04.2008 19:36

Ответ: Правельно распределить
 
неа. это смена текста ;)
вообщето просто вызываешь collisions с нужными параметрами и все. хотя, может есть какие то подводные камни.

moka 01.04.2008 19:38

Ответ: Правельно распределить
 
Не советую это менять реалтайм.
В общем, перебираешь каждый цикл, все соприкосновения, и проверяешь их, если хоть один подходит по параметрам (градус соприкосновения и позиция в области ног), тогда перс уже стоит.

Юзай функцию DebugLog и Stop, чтобы можно было вывести некоторые параметры и остановить программу.

H@NON 01.04.2008 19:56

Ответ: Правельно распределить
 
непонимаю, у меня в проекте смена коллизий не происходила...

avel 20.04.2008 17:21

Ответ: Правельно распределить
 
люди, все гораздо проще! предложу очень тупой, но очень действенный способ... просто, юзаем два типа... один для стен, другой для пола... и все!

moka 21.04.2008 13:55

Ответ: Правельно распределить
 
avel, не очень хороший варриант :)
Если у тебя сложная форма, тогда нада заморачиватся моделлеру, разбивая на части..

AnyWay 21.04.2008 16:56

Re: Ответ: Правельно распределить
 
Цитата:

Сообщение от MoKa (Сообщение 79872)
avel, не очень хороший варриант :)
Если у тебя сложная форма, тогда нада заморачиватся моделлеру, разбивая на части..

Да ладно, классный способ. Дешево и сердито. В 99% не используются формы которые тяжело разбить на пол и стены, а где используются тоже проблем у моделера не много. Зато не надо отдельные сферы коллизий для ног и головы делать. Вот где действительно заморочки.


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

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