Показать сообщение отдельно
Старый 12.05.2011, 12:16   #5
LLI.T.A.L.K.E.R.
Мастер
 
Аватар для LLI.T.A.L.K.E.R.
 
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений
(для 504 пользователей)
Ответ: Проблемы с коллизией

Часть кода моей разработки "3D Platformer"
Collisions SolidPlayer,SolidWorld,2,2

While Not KeyDown(1)

If KeyDown(203) Then
RotateEntity Player1_Body,0,-180,0
MoveEntity Player1_Body,0,0,.04
End If
If KeyDown(205) Then
RotateEntity Player1_Body,0,0,0
MoveEntity Player1_Body,0,0,.04
End If

If KeyDown(57) And Player1_Fall=False Then
cg#=cjstrength#
Say$="летит -*-"
;Player1_Fly=True
Animate Player1_Body,1,.34
End If

Player1_Fall=True

If cg#<-0.01 Then Player1_Fly=True

For x=1 To CountCollisions(Player1_Body)
If GetEntityType(CollisionEntity(Player1_Body,x))=Sol idWorld

Select CollisionNX(Player1_Body,x)
Case 1
Say$="стена сдали ^~"
Case -1
Say$="стена вблизи ~v"
End Select
Select CollisionNY(Player1_Body,x)
Case 1
If Player1_Fly=True Then
Player1_Fly=False
RunSndCh=PlaySound(Steps)
End If
cg#=0.0
Player1_Fall=False
Say$="упал на низ v"
Case -1
cg#=0.0
RunSndCh=PlaySound(UpPush)
Say$="удар сверху ^"
End Select
Select CollisionNZ(Player1_Body,x)
Case 1
Say$="стена слева <"
Case -1
Say$="стена справа >"
End Select
EndIf
Next

If Player1_Fall=True Then cg#=cg#-gravity#

TranslateEntity Player1_Body,0,cg#,0

UpdateWorld

AimCamera2D(Player1_Body,Player1_Body,20)

;ARenderWorld(Camera1) ; тени от AShadows

Text 5,5,Say
Text 5,20,cg
Flip

Wend



видео демонстрация

правильней будет: запретить управлять перемещением, когда игрок в воздухе

Сообщение от PassCall Посмотреть сообщение
Фишка в том, что если ПОДНИМАТЬ кубик, то коллизия работает нормально, но если ОПУСКАТЬ, то мяч сразу же просачивается.
Кубик находится сверху?

В моём коде я приделал перемещение туда-сюда по Y одному кубу.. Когда игрок спускается вместе с кубиком - всё норм.
Когда кубик поднимается (против гравитации игрока) - игрок падает ("просачивается сквозь кубик")


В стандартном примере "Dynamic Collision Lib.bb" с этим всё впорядке.
(там "соединяют парами" взаимно двигающиеся объекты. Function DCO_SetPair)
(Offline)
 
Ответить с цитированием