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

TG 03.11.2007 17:27

Вопрос про коллизии
 
Помогите понять ситуацию:
сделал модель комнаты, в ней столы и стулья (по типу офисных).
Созданы коллизии
Collisions IGROK,STOL,2,3
Collisions IGROK,STUL,2,3

И почему то если игрок запрыгивает на стол, его иногда (вернее скорее всего) подклинивает. И он уже с места не двигается.

Почему? Он и прыгать отказывается после того как его клинануло...

Raiter 03.11.2007 18:03

Re: Вопрос про коллизии
 
Collisions IGROK,STOL,2,3
2 - сфера к полигону
3 - скольжение с предотвращением скатывания с наклонов

Мож луче делать колизию не к полигону, а к паралелепипеду ? ;)

И ваще фиг иго знает какие у тя тама модельки. )))

H@NON 03.11.2007 19:06

Re: Вопрос про коллизии
 
подбери радиус коллизии, мож у тебя сфера коллизии игрока изначально находится в столе/стуле, тогда может глючить, или еще , если у тебя есть гравитация, то отключай ее как только игрок твердо стоит на земле. И вообще приведи полный код, там где у тебя обрабатываются коллизии...

TG 04.11.2007 11:48

Re: Вопрос про коллизии
 
Спасибо за подсказки, буду пробовать :)

GomZik 09.11.2007 00:54

Re: Вопрос про коллизии
 
Ох... Что-то я совсем запутался с этими колизиями... Может вы мне разьясните... Уже сколько этот castle не перелистывал, уже тупо копи паст делал всёравно не работает!!! Вопсчем вот:

p\entity - пивот (EntityRadius=1.5)
p\model - модель привязаная к пивоту
p\y - изначально координата появления по y объекта
collisions TPlayer(на пивоте), CPol(Plane),2,3
идёт обновление мира (пытаюсь сделать гравитацию)
делаем так
ny#=entityy(p\entity)
d_y#=ny-p\y
p\y=ny
d_y=d_y-.2
trnanslateentity p\entity,0,d_y,0

В дэбаг при колизии должна появиться запись... Также в дебаг пишу каждый раз d_y (он от -0.2 и ниже)... Собственно вопрос... Ну пачиму он не колижица????=(((((((( Уже часа 2 долюаюсь =(

tormoz 09.11.2007 01:03

Re: Вопрос про коллизии
 
Вот рабочий код прямо из проекта:

Цитата:

Function UpdateJump()
If he\jump>0 And he\jump_state=1
he\gravity#=he\gravity+he\jump
he\jump=he\jump/1.2
EndIf
;Гравитация

If he\collign
he\gravity=0
he\dop=0
Else
he\dop=he\dop-0.001
If he\dop<-0.06 he\dop=-0.06
he\gravity=he\gravity+he\dop
EndIf

TranslateEntity he\piv,0,he\gravity,0
he\collign=EntityCollided(he\piv,2)
If he\jump_state=1 And he\collign<>0
he\jump_state=0
he\jump_k=0
he\jump=0
EndIf
End Function
лишние переменные выкинешь сам 9там у меня двойной прыжок. отсюда избыток стейтов)

Crystal 09.11.2007 01:39

Re: Вопрос про коллизии
 
GomZik
Надо было весь код выложить чёб все поняли.
я ваще не пойму нах там пивоты.

короче щас тебе пример коллизии и гравитации напишу:

Цитата:

Graphics3D 800, 600, 32
SetBuffer BackBuffer()
HidePointer

Global Red=100
Global Green=150
Global Blue=200

Global User
Global Zemla
Global G#=1
Global l = CreateLight()

Const TypeUser=1,TypeZemla=2,Gravitaciya#=1

User = CreateSphere(10)
ScaleEntity User,1,1,1
PositionEntity User,0,200,0
EntityType User,TypeUser
EntityColor User,90,10,10
EntityRadius User,1


Camera = CreateCamera(User)
PositionEntity Camera,0,30,-20
RotateEntity Camera,35,0,0
CameraClsColor Camera,red,green,Blue


Zemla = CreatePlane()
PositionEntity Zemla,0,-20,0
EntityType Zemla,TypeZemla
EntityColor Zemla,100,200,100

Collisions TypeUser,TypeZemla,2,3

While Not KeyDown(1)

If G#=1 Then TranslateEntity User,0,-Gravitaciya#,0

UpdateWorld
RenderWorld
Flip
Wend
End


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

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