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

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

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

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

Ответ
 
Опции темы
Старый 02.03.2011, 09:00   #1
Proglot
AnyKey`щик
 
Регистрация: 27.02.2011
Сообщений: 2
Написано 0 полезных сообщений
(для 0 пользователей)
Смех Как узнать название столкнувшихся объектов?

Доброго времени суток всем!
При написании маленькой игры столкнулся с проблемой определения на столкновение. Пожалуйста, помогите новичку переписать код!

В общем есть 10 прямоугольников:
Dim brick(10)
For i=1 To 10
	brick(i)=CreateCube()
	ScaleEntity brick(i),7,4,3
	PositionEntity brick(i),-110+i*16.5,70,0
	EntityType brick(i),xenemy
Next
И есть шарик который сбивает эти фигуры. Я не имею представления как узнать название объекта с которым столкнулся шарик, поэтому решил проблему через координаты шарика и перебиранием цикла прямоугольников в момент столкновения:
If EntityCollided (ball,xenemy)
   For i=1 To 10
      If EntityX(brick(i))+3.5>=EntityX(ball) And EntityX(brick(i))-3.5<=EntityX(ball) Then
	MoveEntity brick(i),0,20,0
      End If 
   Next
   UpdateWorld
End If
Здесь 3.5 - это половина длины прямоугольника.

Конечно этот метод не совсем корректный. Есть ли другая функция, которая сразу распознает название объекта после столкновения??
(Offline)
 
Ответить с цитированием
Старый 02.03.2011, 12:04   #2
RBK
Знающий
 
Аватар для RBK
 
Регистрация: 06.12.2010
Адрес: Луганск
Сообщений: 252
Написано 112 полезных сообщений
(для 166 пользователей)
Ответ: Как узнать название столкнувшихся объектов?

CountCollisions ( ball ) - укажет с каким количеством объектов столкнулся шар.
CollisionEntity ( ball , <индекс столкновений> ) - возвращает указатель на столкнувшийся объект.
Индекс может быть от 1 до CountCollisions( ball ) включительно
(Offline)
 
Ответить с цитированием
Старый 02.03.2011, 15:23   #3
Alex_Noc
Разработчик
 
Регистрация: 02.04.2007
Сообщений: 353
Написано 54 полезных сообщений
(для 289 пользователей)
Ответ: Как узнать название столкнувшихся объектов?

entitycollided
(Offline)
 
Ответить с цитированием
Старый 02.03.2011, 19:48   #4
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: Как узнать название столкнувшихся объектов?

*********** - человек спрашивает как узнать ИМЯ объекта.
Ответ: EntityName
__________________


Последний раз редактировалось moka, 02.03.2011 в 21:21. Причина: Будьте попроще с обращением ко всем..
(Offline)
 
Ответить с цитированием
Старый 02.03.2011, 21:23   #5
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Как узнать название столкнувшихся объектов?

mr.DIMAS, если прочесть текст автора топика, то будет ясно что его вопрос не совсем корректно сформулирован. Имя объекта подрузумевалось как сам handle объекта, т.к. он пояснил:
поэтому решил проблему через координаты шарика и перебиранием цикла прямоугольников в момент столкновения:
Это значит что он пытается получить таки хэндл объекта а не его имя.
Также при создании объектов, там нету ничего указывающего на наименование объекта.

Также пометка в примечании, но и так помечу - будь проще с обращением недовольств к окружающим.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ABTOMAT (04.03.2011)
Старый 02.03.2011, 23:44   #6
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: Как узнать название столкнувшихся объектов?

Глубоко извиняюсь. Просто новичка иногда сложно понять. А "******" это просто стёб
__________________

(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
moka (03.03.2011)
Старый 03.03.2011, 04:24   #7
Proglot
AnyKey`щик
 
Регистрация: 27.02.2011
Сообщений: 2
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Как узнать название столкнувшихся объектов?

Всем спасибо за помощь!

Сообщение от MoKa Посмотреть сообщение
Имя объекта подрузумевалось как сам handle объекта, т.к. он пояснил:
Это значит что он пытается получить таки хэндл объекта а не его имя.
В чем разница между handle и именем объекта?
Под ИМЕНЕМ я подразумевал названия переменных ball и brick(1),brick(2),...,brick(10).
По идее после столкновения, прямоугольник надо переместить за пределы экрана, создавая иллюзию исчезновения. Но вот как безболезненно узнать имя того прямоугольника, которую надо переместить?
(Offline)
 
Ответить с цитированием
Старый 03.03.2011, 13:54   #8
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Как узнать название столкнувшихся объектов?

Имя объекта это текстовая строка, привязанная к объекту.
Имя переменной - это другое дело, но ты не можешь получить имя переменной, но можешь получить её значение. Переменная имеет своё значение - указатель на объект, или проще сказать handle.
Терминология сбивает с толку, поэтому и были проблемы с пониманием вашего вопроса.

И вам уже ответ дали на вопрос во втором посту, этого более чем достаточно, в справке есть хорошие примеры.
Насчёт действия с объектом, можешь его вообще тупо удалить (FreeEntity)

Если тебе нужно получить номер из твоего списка (brick) то тут иначе, хотя я не думаю что тебе это нужно.
(Offline)
 
Ответить с цитированием
Старый 03.03.2011, 14:57   #9
LLI.T.A.L.K.E.R.
Мастер
 
Аватар для LLI.T.A.L.K.E.R.
 
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений
(для 504 пользователей)
Ответ: Как узнать название столкнувшихся объектов?

Коллизии в Blitz3D не оптимизированы? (слишком грузанутые?)

А может вообще использовать для Объектов вычисления расстояния между ними (и пулями)? заместо коллизий..

Перебор всех объектов будет в любом случае. Но вот разница между мат. вычислениями и коллизиями в Blitz3D огромна по производительности (так здесь писали)..

По теме:

EntityCollided возвращает объект столкновения..

CollidedEntity=EntityCollided(ball,xenemy)
Далее Обязательно!!!

If CollidedEntity <> 0 Then
Достоверность проверить не могу (не хочу), так как в своём проекте (на некоторое время) отказался от коллизий.

Сообщение от MoKa
Но если там кубики и пули, не должно ничего глючить, может ты не совсем это дело корректно делаешь..
Подвиды коллизий одинаковы: 1 сфера, 2 полигон (мэш), 3 кубик

Просто когда действуют коллизии:
игрок - стены
пули игрока - стены
враги - стены
пули врагов - стены

Fps снижается в 2 раза

это ещё не считая:
игрок - враги
враги - враги
(Offline)
 
Ответить с цитированием
Старый 03.03.2011, 15:02   #10
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Как узнать название столкнувшихся объектов?

Для проверки коллизий, происходит немало математических процессов. Простая математическая формула будет естественно шустрее в разы.
Но если там кубики и пули, не должно ничего глючить, может ты не совсем это дело корректно делаешь..
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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