Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 04.05.2011, 11:06   #1
PassCall
Разработчик
 
Аватар для PassCall
 
Регистрация: 07.04.2011
Адрес: Млечный путь, Земля, Европа, Беларусь, Могилев
Сообщений: 391
Написано 94 полезных сообщений
(для 319 пользователей)
Вопрос Проблемы с коллизией

Добрый день всем!
Недавно начал программить на блице. Я зык хороший, но у меня возникла проблема с коллизией.

В общем, я, как обычно, вношу мяч и окружающий мир в коллизию группу. Затем идет проверка, нет ли коллизии, и если коллизии нет, мяч падает вниз(увеличивается скорость падения). Если коллизия есть, скорость падения умножается на -0.75.
Затем позиция мяча по y уменьшается на величину скорость падения.

Теперь сделаем под мячом, например, кубик.

Компилируем.
Мяч падает и отскакивает. Все работает. Автор радуется.
Но если придать кубику двивежие по оси y, мяч просто просачивается сквозь кубик.

Что не так?

Еще реализовано, что при нажатии пробела и присутствии коллизии мяч подпрыгивает (скорость падения=-1).
Но он будет прыгать даже если коснуться вертикальной стены. Эдакий спайдермен =(
Как определить, когда коллизия происходит с полом, а когда со стеной?

Ответьте пожалуйста на вопросы.
С уважением, PassCall
__________________
Мечта программиста: запрограммировать процесс программирования.

Всё гениальное - просто.

http://passcall.ucoz.com

Последний раз редактировалось PassCall, 04.05.2011 в 11:07. Причина: ОшибкЕ
(Offline)
 
Ответить с цитированием
Старый 04.05.2011, 12:10   #2
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Проблемы с коллизией

Коллизии взаимно движущихся предметов не считаются.
Но с этим можно бороться.
Например есть группа объектов входящих в группу коллизий А и есть группа коллизий Б.
Тогда передвигаем только объекты группы А, вызываем CaptureWorld для фиксации их положения для физ. движка. Двигаем объекты группы Б, вызываем UpdateWorld. Должно работать.

И да незабыть назначить взаимные коллизии. А -> Б и Б -> А
Т.к. коллизии однонаправленные.
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
LLI.T.A.L.K.E.R. (12.05.2011)
Старый 04.05.2011, 15:12   #3
Taugeshtu
scientist.alien
 
Аватар для Taugeshtu
 
Регистрация: 12.02.2007
Сообщений: 2,098
Написано 1,030 полезных сообщений
(для 2,593 пользователей)
Ответ: Проблемы с коллизией

он будет прыгать даже если коснуться вертикальной стены. Эдакий спайдермен
Warning! Блитца под рукой нет, давно на нём не прогал, но в общем случае:

Решения!
  1. Сделать всё, от чего отпрыгивать нельзя, другой коллизионной группой;
  2. Взять нормаль точки соприкосновения (вот не знаю, есть ли такая возможность в б3д) и проверить на вертикальность (по сути, т.к. нормаль всегда по длине = 1, достаточно взять Y-компоненту, и проверить её на близость к еденице, допустим (Y > 0. - тогда не прыгаем)
__________________
Public service announcement: вы можете заблокировать отображение сообщений определённого пользователя, добавив его ник в список игнорируемых.
Tau lab.
We LOVE you. We MADE you.
(Offline)
 
Ответить с цитированием
Старый 11.05.2011, 14:33   #4
PassCall
Разработчик
 
Аватар для PassCall
 
Регистрация: 07.04.2011
Адрес: Млечный путь, Земля, Европа, Беларусь, Могилев
Сообщений: 391
Написано 94 полезных сообщений
(для 319 пользователей)
Плохо Ответ: Проблемы с коллизией

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

Всё гениальное - просто.

http://passcall.ucoz.com
(Offline)
 
Ответить с цитированием
Старый 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)
 
Ответить с цитированием
Старый 12.05.2011, 12:22   #6
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: Проблемы с коллизией

CollisionNY( entity, collision_number )
__________________

(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com