![]() |
Коллизия без метода? Это возможно?
В общем мне надо как-то сделать что бы столкновение между объектами просчитывалось, что они объект соприкасается с другим, но при этом они могли спокойно проходить сквозь друг друга. Так можно сделать? Например вот движется куб, проходит сквозь другой куб и в этот момент считается коллизия, но куб не останавливается, а проходит насквозь.
|
Ответ: Коллизия без метода? Это возможно?
Кажется тебе стоит посмотреть в сторону CountCollisions ( entity )... (Справка) Команда возвращает число столкновений за последний UpdateWorld();)
|
Ответ: Коллизия без метода? Это возможно?
ы? А кто мешает тебе проверять дистанцию между твоими кубами? Если все-таки нужно столкновения , то делай так:
If EntityCollided(cube1,cube2) Then ClearCollisions() при столкновении кубов эта команда очистит список столкновений, поэтому столкновения не будут обрабатываться до следующего использования команды Collisions. |
Re: Коллизия без метода? Это возможно?
Не, мне надо что бы коллизия считалась, так как она будет условием внутри цакла, триггером считайте, но кубы должны проходить сквозь друг друга. А Countcollisions только выдаст количество столкновений, оно без Collisions не работает всё равно и не поможет мне.
|
Ответ: Коллизия без метода? Это возможно?
А EntityDistance не может быть условием внутри цикла?
|
Ответ: Коллизия без метода? Это возможно?
Цитата:
|
Re: Коллизия без метода? Это возможно?
Эх, дистанция подошла бы если бы определялась дистанция до ближайшего полигона или хотя бы стороны бокса модели, а определяется до центра, а мне надо что бы при контакте с гланицами срабатывало условие.(
|
Ответ: Коллизия без метода? Это возможно?
последний параметр отвечает за реакцию на столкновение, 0 вроде отключает реакцию.
Collisions type1, type2, method, 0 |
Re: Коллизия без метода? Это возможно?
Неа, не работает. Я тут посмотрел, а если через Entityintersect? Она очень тормозит программу?
|
Ответ: Коллизия без метода? Это возможно?
Подключи физикс и радуйся жизни. Средствами блитца коллизии медлительны, хотя если не хочется привлекать сторонние модули - ими тоже можно обойтись...
Хитросфинктерное решение: перед применением коллизий (вроде updateworld, да?) запоминать координаты объектов, затем применять коллизии, считать пересечения объектов и возвращать ентити в свои позиции перед рендером. Но как я понял, тебе такое не подойдет. МешИнтерсект кажется затратный был ощутимо... |
Ответ: Коллизия без метода? Это возможно?
мешИнтерсект как бэ решение !! ;)
|
Ответ: Коллизия без метода? Это возможно?
Я как то попробовал мешинтерсект -
когда возле игрока слишком много полигонов было(относительно много) то игра начала тормозить |
Re: Коллизия без метода? Это возможно?
Ну у меня интерсект проверяется только с объектами триггерами, а они максимум 20 поликов, в основном вообще боксы всякие в максе расставленные. Просто при коллизии если без пересечения то надо что бы объект постоянно упарался в этот триггер, а не просто стоял в нём.
|
Ответ: Коллизия без метода? Это возможно?
Юзай мою систему триггеров :
Код:
;============================ Код:
Graphics3D 800, 600, 32, 2 InitTrigger() - это инициализация системы, ее нужно ставить сразу после того как вы заинклудили исходник, то есть после строки: Include "TrigMain.bb" AddTrigSphere(debug=False, x#, y#, z#, radius#=1) Функция создает триггер, который реагиурет на расстояние, то есть если предмет ближе чем радиус триггера, тогда он сработает. Параметры функции: debug - нужно для визуальной отладки, если равна True, тогда на месте триггера создается сфера. x, y, z - координаты триггера radius - это радиус реагирования триггера AddTrigBox(debug=False, x#, y#, z#, w#=1, h#=1, d#=1, Tip=TRIG_BOX1, pitch#=0, yaw#=0, roll#=0) Функция создается триггер ввиде коробки( параллепипеда ). Бывает двух типов, но о них ниже. Параметры: debug - также как и в предыдущей функции нужна для отладки. Создается бокс на месте триггера нужного размера. x, y, z - указываем координаты триггера w, h, d - размеры, ширина, высота и глубина соответственно. Tip : - задаем тип бокса TRIG_BOX1 - это самая простая и самая быстрая проверка, проверка на координаты. TRIG_BOX2 - это прповерка учитывает ориентацию бокса, то есть он может быть повернут. Если Tip равен TRIG_BOX2, тогда учитываются следующие параметры: pitch, yaw, roll - углы поворота бокса CheckEntityInTrig( ent, t.TriggerInfo ) Основная функция. Она проверяет нахождение объекта в заданном триггере, если это так, тогда возвращает True иначе False. ent - объект, который нужно проверить на пересечение с триггером t.TriggerInfo - триггер, с которым осуществляется проверка. Вся система крайне быстрая( проверка на расстояние сделана по быстрому методу с уходом от квадратного корня ) и удобная в обращении. Чтобы создать триггер нужно сделать следующее: Include "TrigMain.bb" ; подключаем систему InitTrigger() ; инициализируем триггер Global trig.triggerinfo ; создаем переменную под триггер x=6 : y=0 : z=0 radius = 2 trig = AddTrigSphere(True, x,y,z, radius) if CheckEntityInTrig( Entity, trig )=true then ;.... что делать если ентити внутри тригера endif |
Часовой пояс GMT +4, время: 12:53. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot