|
3D-программирование Вопросы, касающиеся программирования 3D мира |
01.04.2008, 13:03
|
#1
|
Бывалый
Регистрация: 19.09.2005
Сообщений: 649
Написано 3 полезных сообщений (для 3 пользователей)
|
Правельно распределить
Люди! Может кто знает где информацию почитать или может сам кто-нить напишет как правильно распределять типы коллизий для мира в игре и вообще как правильно распределить объекты в игре к нужным типам. Например, чтобы не получилось так, чтобы человек мог лазить по стенкам, словно человек паук. Если кто не понял, могу более понятно написать))))
|
(Offline)
|
|
01.04.2008, 13:09
|
#2
|
Дэвелопер
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений (для 774 пользователей)
|
Ответ: Правельно распределить
чтобы человек не лазил постенкам можно написать простенький код, типо:
colY# = CollisionY(player, n) - EntityY( player, 1 )
If colY# < 0 then
; тут код чтобы человечек мог перемещатся
EndIf
Объясняю, CoY возвратит место в мировых координатах на коллизионной сфере где было столкновение, так можно определить есть ли земля под ногами у игрока.
Вообще типы коллизий устанавливаются по необходимости нужным объектам, для всего что не будет контактировать с плеером, а только коллизится можно сделать тип StaticCol.
|
(Offline)
|
|
01.04.2008, 14:45
|
#3
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Правельно распределить
Hanon, false. все равно сможет лазить. например прыжог зажмет. или еще как изловчиться. какие еще есть предложения? (я не смог победить ету проблему пару лет назад).
|
(Offline)
|
|
01.04.2008, 15:14
|
#4
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
Ответ: Правельно распределить
Это довольно сложно
Каждый решает по-своему.
Например у меня две сферы коллизии - одна в ногах для гравитации, другая на корпус для стен.
И жутко замученный код для совмещения всего этого.
Для начинающего пойдет и примитивный с лазаньем по стенам.
все равно он нифига не поймет, выложи я сейчас исходник (я порой сам не пойму что я там понаписывал ))))
__________________
|
(Offline)
|
|
01.04.2008, 16:31
|
#5
|
Дэвелопер
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений (для 774 пользователей)
|
Ответ: Правельно распределить
Сообщение от HolyDel
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 )
Там есть еще продолжение, потому что в таком случае исчезнет один лаг, и появится новый, я его поборол но черезжопно.
|
(Offline)
|
|
01.04.2008, 18:05
|
#6
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Правельно распределить
Юзаю PhysX, хотя и нативной коллизией не сложно реализовать.
В общем принцип таков:
1. Определяешь стоит ли персонаж (стоит ли на ногах).
2. Исходя из этого (True/False), уже реализуешь управление персонажем.
Как вычислить стоит ли. Ну вопервых координата коллизии, должна быть в радиусе ног (можно тупо к координате Y прицепить).
Второе, нужно определить вектор коллизии (CollisionN[X/Y/Z]). Перевести в градус и сделать ограничение. Если градус на 50-100% паралелен вертикали гравитации - то перс стоит, в обратном случае, он уже не стоит а скользит или т.п.
Таким образом я делаю коллизию, выходит весьма шустро и без проблем нормально работает
|
(Offline)
|
|
01.04.2008, 19:19
|
#7
|
Бывалый
Регистрация: 19.09.2005
Сообщений: 649
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: Правельно распределить
2Moka довольно интересный подход.. Только я немного про вектор коллизии не понял, а именно каким образом определить. Если я правельно понимаю то нада определять вектор относительно места прыжка?
|
(Offline)
|
|
01.04.2008, 19:20
|
#8
|
Дэвелопер
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений (для 774 пользователей)
|
Ответ: Правельно распределить
вот именно это скольжение и вызвало у меня затруднения. Так как реакцию на коллизию оказывается нельзя менять после того как один раз задал, поэтому приходится писать свой алгоритм скольжения.
|
(Offline)
|
|
01.04.2008, 19:35
|
#9
|
Бывалый
Регистрация: 19.09.2005
Сообщений: 649
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: Правельно распределить
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
.....
|
(Offline)
|
|
01.04.2008, 19:36
|
#10
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Правельно распределить
неа. это смена текста
вообщето просто вызываешь collisions с нужными параметрами и все. хотя, может есть какие то подводные камни.
|
(Offline)
|
|
01.04.2008, 19:38
|
#11
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Правельно распределить
Не советую это менять реалтайм.
В общем, перебираешь каждый цикл, все соприкосновения, и проверяешь их, если хоть один подходит по параметрам (градус соприкосновения и позиция в области ног), тогда перс уже стоит.
Юзай функцию DebugLog и Stop, чтобы можно было вывести некоторые параметры и остановить программу.
|
(Offline)
|
|
01.04.2008, 19:56
|
#12
|
Дэвелопер
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений (для 774 пользователей)
|
Ответ: Правельно распределить
непонимаю, у меня в проекте смена коллизий не происходила...
|
(Offline)
|
|
20.04.2008, 17:21
|
#13
|
Бывалый
Регистрация: 12.10.2006
Сообщений: 737
Написано 131 полезных сообщений (для 452 пользователей)
|
Ответ: Правельно распределить
люди, все гораздо проще! предложу очень тупой, но очень действенный способ... просто, юзаем два типа... один для стен, другой для пола... и все!
|
(Offline)
|
|
21.04.2008, 13:55
|
#14
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Правельно распределить
avel, не очень хороший варриант
Если у тебя сложная форма, тогда нада заморачиватся моделлеру, разбивая на части..
|
(Offline)
|
|
21.04.2008, 16:56
|
#15
|
Оператор ЭВМ
Регистрация: 08.09.2007
Сообщений: 47
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: Ответ: Правельно распределить
Сообщение от MoKa
avel, не очень хороший варриант
Если у тебя сложная форма, тогда нада заморачиватся моделлеру, разбивая на части..
|
Да ладно, классный способ. Дешево и сердито. В 99% не используются формы которые тяжело разбить на пол и стены, а где используются тоже проблем у моделера не много. Зато не надо отдельные сферы коллизий для ног и головы делать. Вот где действительно заморочки.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:08.
|