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

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

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

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

Ответ
 
Опции темы
Старый 09.08.2009, 16:58   #1
ELIAS
Знающий
 
Аватар для ELIAS
 
Регистрация: 30.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений
(для 6 пользователей)
EntityCollided, при движущихся навстречу друг другу объектах

В игре физ-двиг полностью основан на блитц-коллизиях. Меня они полностью устраивают - удобные, не тормозят, а по возможностям как-раз то что необходимо для моего сромненького проекта.
Единственное пока я не могу замутить на них, это определять столкновение, когда объекты движутся НАВСТРЕЧУ ДРУГ ДРУГУ!

Ну а надо делать движущиеся препятствия, двигающиеся колючки, враги в конце концов. Как-то можно обойтись кончено и entitydistance`ом. Но это очень ограничивает меня! А если припятствие вытянутое, или вообще форма какая-нибудь непростая + с отверстиями.

А блитц-коллизии глючат лично у меня в выше описанном случае. Наверно надо как-нибудь выдумывать искусственный метод обхода такой четровщины. Хотелось бы узнать если кто с этим встречался, то что получилось изобрести на этот счет. Или просто мнение каждого из вас что может быть полезнам в этом случае?..

Использовать сторонние ДЛЛ крайне не желательно. Ведь такая казалось ерунда осталось, а так весь физ-двиг уже готов.
(Offline)
 
Ответить с цитированием
Старый 09.08.2009, 18:10   #2
BlackDragon
Проектировщик
 
Аватар для BlackDragon
 
Регистрация: 25.03.2007
Сообщений: 536
Написано 252 полезных сообщений
(для 715 пользователей)
Ответ: EntityCollided, при движущихся навстречу друг другу объектах

1) В 1-м кадре перемещай врагов, во втором угрока - в итоге получаем коллизию со статичными обьектами.
2) На сильновытянутых обьектах можно расставить виртуальные точки (если лень перещитывать координаты, или в уровне мало энтити, то можно использовать пивоты), и измерять дистанцию между ними и игроком.
3) Чтото пока больше ниче в голову не приходит
(Offline)
 
Ответить с цитированием
Старый 29.08.2009, 14:18   #3
ELIAS
Знающий
 
Аватар для ELIAS
 
Регистрация: 30.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений
(для 6 пользователей)
Ответ: EntityCollided, при движущихся навстречу друг другу объектах

Не получилось ничего(((
Вот семпл-код

Graphics3D 800, 600, 16, 2

lit=CreateLight()

cam=CreateCamera()


Collisions 1,2,2,3

player=CreateSphere() : ScaleMesh player, 50,50,50
EntityRadius player, 50 : EntityType player, 1

enemy=CreateCube() : ScaleMesh enemy, 50,50,50
EntityType player, 2
MoveEntity enemy, 0,0, 300

PositionEntity cam, 0,700,00
PointEntity cam, player




Repeat
	
	If KeyDown(200) Then MoveEntity player,0,0,1
	
	If KeyDown(208) Then MoveEntity enemy,0,0,-1
	
	
	
	UpdateWorld
	RenderWorld
	
	
	If EntityCollided(player,2)>0 Then Text 20,20, "Игрок сколлизился с врагом!"
	If EntityCollided(enemy,1)>0 Then Text 20,40, "Враг сколлизился с игрком!"
	
	Flip 60
	
Until KeyHit(1)

End
сфера-игрок, в коллизиях он является эллипсоидом.
куб-враг, он должен просчитываться в коллизиях по полигонам.

существует три основных ситуации:
1) враг стоит, игрок движется на него.
2) враг движется на игрока, игрок стоит.
3) враг и игрок движутся навстречу друг другу.

Ну и надо чтобы в любом из этих случаев безошибочно определялся момент когда игрок и враг сколлизились. В дангом семпле нужно чтобы высвечивались соотвествующие надписи.
В этом семпле, странно, вообще чего то не получилось...((( А в игре у меня коллизии определяются в 1 и 3 случаях, а вот во 2, если игрок стоит - то враг проходит сквозь игрока - и ничего((


Ну вообщем, прошу поправить код таким образом, чтобы все три случая определялись. Пользоваться внешними длл - нельзя, только блитц коллижн.

Заранее спасибо!
(Offline)
 
Ответить с цитированием
Старый 29.08.2009, 17:08   #4
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений
(для 4,437 пользователей)
Ответ: EntityCollided, при движущихся навстречу друг другу объектах

Graphics3D 800, 600, 16, 2

lit=CreateLight()

cam=CreateCamera()




player=CreateSphere() 
ScaleMesh player, 50,50,50
EntityRadius player, 50 
EntityType player, 1

enemy=CreateCube() : ScaleMesh enemy, 50,50,50
EntityType enemy, 2
EntityRadius enemy, 50 
MoveEntity enemy, 0,0, 300

PositionEntity cam, 0,700,00
PointEntity cam, player

Collisions 1,2,2,3
Collisions 2,1,2,3

Repeat
	UpdateWorld
	If KeyDown(200) Then MoveEntity player,0,0,1
	
	If KeyDown(208) Then MoveEntity enemy,0,0,-1
	
	
	
	
	RenderWorld
	
	
	If EntityCollided(player,2)>0 Then Text 20,20, "Игрок сколлизился с врагом!"
	If EntityCollided(enemy,1)>0 Then Text 20,40, "Враг сколлизился с игрком!"
	
	Flip 60
	
Until KeyHit(1)

End
__________________
(Offline)
 
Ответить с цитированием
Старый 29.08.2009, 20:00   #5
ELIAS
Знающий
 
Аватар для ELIAS
 
Регистрация: 30.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений
(для 6 пользователей)
Ответ: EntityCollided, при движущихся навстречу друг другу объектах

tormoz, спасибо, но мне нужно чтобы враг по полигонам просчитывался... это ту простой пример - а на деле будут враги не совсем правильной формы + в большей части это даже будет использоваться для различных колючек - ну а они уж будут совсем разнообразной формы и при этом ещё будут двигаться.

Так что условие
враг должен просчитываться в коллизиях по полигонам
очень важно

Ещё могут быть варианты, или при таком раскладе это уже выходит за границы блитца???


Мне кстати понравилась идея ЧерногоДракона про
1) В 1-м кадре перемещай врагов, во втором угрока - в итоге получаем коллизию со статичными обьектами.
Но у меня не получилось сделать такое, к примеру этот же самый код, как бы я реализовывал идею ЧерногоДракона:

Graphics3D 800, 600, 16, 2

lit=CreateLight()

cam=CreateCamera()


Collisions 1,2,2,3

player=CreateSphere() : ScaleMesh player, 50,50,50
EntityRadius player, 50 : EntityType player, 1

enemy=CreateCube() : ScaleMesh enemy, 50,50,50
EntityType player, 2
MoveEntity enemy, 0,0, 300

PositionEntity cam, 0,700,00
PointEntity cam, player




Repeat
	val=Not val
	
	If KeyDown(200) And val=0 Then MoveEntity player,0,0,1
	
	If val=1 Then MoveEntity enemy,0,0,-1
	
	
	
	UpdateWorld
	RenderWorld
	
	
	If EntityCollided(player,2)>0 Then Text 20,20, "Игрок сколлизился с врагом!"
	If EntityCollided(enemy,1)>0 Then Text 20,40, "Враг сколлизился с игрком!"
	
	Flip 60
	
Until KeyHit(1)

End
вот так. ну почему то не работает. почему??? у меня по этому поводу вообще идей нет!!! что за странности...
(Offline)
 
Ответить с цитированием
Старый 29.08.2009, 20:07   #6
MiXaeL
Бывалый
 
Аватар для MiXaeL
 
Регистрация: 22.08.2006
Сообщений: 700
Написано 146 полезных сообщений
(для 267 пользователей)
Ответ: EntityCollided, при движущихся навстречу друг другу объектах

Коллизии для движущегося объекта в блитце всегда должны проверяться по сфере.
Если уж очень надо используй MeshesIntersect и упрощенные меши для своих моделей. А то тормозить будет.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ELIAS (30.08.2009)
Старый 29.08.2009, 20:21   #7
BlackDragon
Проектировщик
 
Аватар для BlackDragon
 
Регистрация: 25.03.2007
Сообщений: 536
Написано 252 полезных сообщений
(для 715 пользователей)
Ответ: EntityCollided, при движущихся навстречу друг другу объектах

Collisions 1,2,2,3
Collisions 2,1,2,3    <-  Во-вторых, враг во время своего хода может поглотить сферу игрока и коллизи не будет

player=CreateSphere() : ScaleMesh player, 50,50,50
EntityRadius player, 50 : EntityType player, 1

enemy=CreateCube() : ScaleMesh enemy, 50,50,50
EntityType enemy, 2     <- Во-первых внимательнее надо быть
EntityRadius enemy, 50<-  Во-вторых, враг во время своего хода может поглотить сферу игрока и коллизи не будет
Ну а если враги очень сложной формы, то надо извратиться и написать свой коллижен детекше. Все зависит от конкретных условий.

UPD: Вообщем фигня какаято получается, подумай сам.

Последний раз редактировалось BlackDragon, 29.08.2009 в 20:32. Причина: Прозрение
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ELIAS (30.08.2009)
Старый 30.08.2009, 08:04   #8
ELIAS
Знающий
 
Аватар для ELIAS
 
Регистрация: 30.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений
(для 6 пользователей)
Ответ: EntityCollided, при движущихся навстречу друг другу объектах

Спасибо, BlackDragon, а я совсем не так понимал раньше коллизии... я думал что они как раз и проверяют пересечение 3-х мерных фигур, теперь все ясно - теперь понятно почему код не работает...Именно из-за взаимного проникновения мешей... Да и невнимательность, особенно с копи-пастом - часто подводит))

MiXaeL, спасибо, за эту штуковину, я раньше и не знал о такой команде!!! MeshIntersect - вот мое спасение!!! В этом коде получилось все устроить как нужно, сейчас буду с игрой заниматься - посмотрим на сколько производительность упадет... надеюсь несильно. а насчет упрощенных мешей - это само собой понятно, ещё с моддерства на gta vice city это знаю и активно использую в игре - все что можно упрощаю))


Кстати вопрос...В блитце коллизиях вместо "сфера" говорится "эллипсоид" - ну а я так понял что сферу вытянуть в нем нельзя, хотя очень бы хотелось...
(Offline)
 
Ответить с цитированием
Старый 30.08.2009, 11:09   #9
MiXaeL
Бывалый
 
Аватар для MiXaeL
 
Регистрация: 22.08.2006
Сообщений: 700
Написано 146 полезных сообщений
(для 267 пользователей)
Ответ: EntityCollided, при движущихся навстречу друг другу объектах

Сферу коллизии можно вытягивать в блитце (с версии 1.69, если не ошибаюсь) но только по одной оси - Y. Почитай хелп к EntityRadius.

Последний раз редактировалось MiXaeL, 30.08.2009 в 11:14.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ELIAS (30.08.2009)
Старый 30.08.2009, 12:54   #10
ELIAS
Знающий
 
Аватар для ELIAS
 
Регистрация: 30.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений
(для 6 пользователей)
Ответ: EntityCollided, при движущихся навстречу друг другу объектах

Точно! спасибо, михаил!
(Offline)
 
Ответить с цитированием
Старый 30.08.2009, 19:16   #11
Dream
быдло
 
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений
(для 1,489 пользователей)
Ответ: EntityCollided, при движущихся навстречу друг другу объектах

хмм... а чегоэто тока по У?
EntityRadius entity,x_radius#,y_radius#
вытягивай хоть по х хоть по у
или я не прав О_О
(Offline)
 
Ответить с цитированием
Старый 31.08.2009, 09:53   #12
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 25.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,628
Написано 5,375 полезных сообщений
(для 15,495 пользователей)
Ответ: EntityCollided, при движущихся навстречу друг другу объектах

или я не прав О_О
Первый параметр растягивает в двух осях - х и z
Т.е. вытянуть в сторону не получится
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Старый 31.08.2009, 11:06   #13
Dream
быдло
 
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений
(для 1,489 пользователей)
Ответ: EntityCollided, при движущихся навстречу друг другу объектах

ну если вытянуть по конкретно оси Х или З то получился коечно похожее на Х...
(Offline)
 
Ответить с цитированием
Старый 31.08.2009, 12:38   #14
Ky3R_94
Нуждающийся
 
Аватар для Ky3R_94
 
Регистрация: 29.08.2009
Адрес: Україна, Донецьк
Сообщений: 71
Написано 13 полезных сообщений
(для 45 пользователей)
Ответ: EntityCollided, при движущихся навстречу друг другу объектах

Оу, люди... Если вы не против... То у меня проблема аналогичного плана. Как сделать так чтобы один объект мог толкать другой? Ну например, как лифт поднимает игрока вверх. Вариант с проверкой коллизии и последующим движением игрока со скоростью лифта в соответствующем направлении не катит, так как возможно использование параллельно других типов объектов, типа каких нибудь поинтов висящих в воздухе. Да и вообще имхо маразм прицепиться к лифту сбоку и взмыть на небеса =^)
(Offline)
 
Ответить с цитированием
Старый 31.08.2009, 13:23   #15
MiXaeL
Бывалый
 
Аватар для MiXaeL
 
Регистрация: 22.08.2006
Сообщений: 700
Написано 146 полезных сообщений
(для 267 пользователей)
Ответ: EntityCollided, при движущихся навстречу друг другу объектах

Используйте физикс и не парьтесь зря)

Но если физикс совсем не хочется юзать, и круче лифтов ничего не надо, то можно посмотреть сюда - http://forum.boolean.name/showthread.php?t=38

УПД. Ссылка там битая, у Импера в личку попросите, если надо.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Ky3R_94 (31.08.2009)
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Друг ARA Работы 0 14.07.2008 14:25
Сетевая синхронизация движущихся объектов stone_evil Blitz3D 9 11.01.2008 09:19
Друг Nikto Стихотворения 5 08.01.2008 09:55
хелп моему другу booblik Основной форум 1 27.09.2007 04:14
Как думает наш железный друг ? Kain Алгоритмика 12 26.01.2006 20:16


Часовой пояс GMT +1, время: 06:53.


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