12.05.2011, 12:16
|
#5
|
Мастер
Регистрация: 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)
|
|