![]() |
Старая песня о главном: Collision
Перерыл много материала на форуме, но ответа так и не нашел. Возможно плохо искал, но все же прошу помощи, ибо уже 3й день мучусь...
есть коллизия: Collisions CBullet,CEnemy,3,2 ;3,1;2,2 (пробовал разные варианты) Collisions CEnemy,CBullet,3,3 ;3,1;2,2 есть анимированные модели, которые движутся на игрока: enemy.Tenemy = New Tenemy enemy\ent = CopyEntity(enemyTypes\ent) EntityType enemy\ent,CEnemy,True enemy\anim = FindChild(enemy\ent,"Sphere01") Animate enemy\anim,1,2 Next есть обработка коллизии: Function OnCollision() ;for enemies For enemy.TEnemy = Each TEnemy If EntityCollided(enemy\ent,CBullet) Then GameInfo\score=GameInfo\score+50 For bullet.Tbullet = Each TBullet If EntityCollided( bullet\ent,CEnemy) Then DeleteBullet() DeleteEnemy() EndIf Next EndIf Next ;bullets to enemies For bullet.Tbullet = Each TBullet If EntityCollided( bullet\ent,CEnemy) Then DebugLog "12345" For enemy.TEnemy = Each TEnemy If (EntityCollided(enemy\ent,CBullet)) Then GameInfo\score=GameInfo\score+50 DeleteBullet() DeleteEnemy() ;DebugLog "collided" EndIf Next EndIf Next End Function И пули и враги движутся одновременно. Проблема в том, что это всё очень коряво работает, а именно: если пуля попадает в центр модели врага, то он с горем пополам удаляется и все работает. Но если же пуля проходит чуть сбоку, то начинает скользить по нему и коллизия вроде бы как и срабатывает (поскольку есть скольжение), но никакое удаление ни пули ни врага не происходит. + если одновременно в одного врага попадают 2 пули, выбивает ошибку, что не может удалить enemy\ent, поскольку его уже нет. Не знаю что уже и делать с этим. Перепробовал много вариантов, но толку мало. Если кто подскажет, как решить проблему или как обойтись без коллизии, буду очень благодарен. |
Ответ: Старая песня о главном: Collision
Цитата:
нада что то 1 перебирать !! :) |
Ответ: Старая песня о главном: Collision
Цитата:
|
Ответ: Старая песня о главном: Collision
а почему не объявляешь циклы прям сразу в начале функции? так глюков меньше.
и кстати, если удаляешь пулю, удалять её нужно вместе с её типом, насколько помню. также и с врагом, если его нужно удалять, тоже. то есть: FreeEntity СамаПуля Delete ТипСПулями и кстати, с анимированными моделями коллизии вообще штука проблемная. по крайней мере у меня никогда не срабатывало. может лучше объявить для модели бота вначале какой-нть пивот для столкновений? |
Ответ: Старая песня о главном: Collision
Цитата:
Цитата:
Цитата:
Раньше пытался двигать простым боксом и коллизить им же, а анимированную модель через parent приклеить. Тоже не особо получалось. |
Ответ: Старая песня о главном: Collision
Реализовал сия проект через пивот. Эффект тот же: пуля почему-то скользит по поверхности врага, а обработку явления коллизии отловить не могу :( :( :(
|
Ответ: Старая песня о главном: Collision
Получилось что-то правдоподобное лишь в случае 3-единости врага:
1. пивот - отвечает за перемещение, и служит перентом для остальных 2х: 2. бокс (прозрачный) - за коллизию 3. аниммированная модель - для красоты :)))) Если есть идеи получше, с удовольствием выслушаю :) |
Ответ: Старая песня о главном: Collision
Этот топ меня пугает, но пост №7 особенно
|
Ответ: Старая песня о главном: Collision
Цитата:
Код:
obi=(EntityCollided(all\mesh,2)) |
Ответ: Старая песня о главном: Collision
Сложно сказать, много наворочено :)
Но проверять лучше пуля к боту, а бот об пулю ни к чему. Если бот со скином, то нужно найти (FindChild) скин и ему назначать EntityType, это если нужно сфера к полигону. Если достаточно сфера к сфере, то коллизия будет по EntityRadius. Вобщем есть смысл проверить все на кубиках ) , сразу найдешь что к чему. |
Ответ: Старая песня о главном: Collision
да, шото странно) ведь у нас пуля с ботом коллизится а не бот с пулей) вот и вычисляй если пуля коснулась бота то убираем бота
|
Ответ: Старая песня о главном: Collision
Цитата:
Цитата:
если бы это был обычный расстрел ботов, то всё было бы хорошо. А так всё движется, всё коллизится - и всё глючит :-D Цитата:
|
Ответ: Старая песня о главном: Collision
А зачем так над пулями шутить? Я понимаю, если бы были ракеты. Имхо, если стреляешь пулями ты, то лучше реализовывать через CameraPick, а если наоборот (в тебя шмалят боты), то лучше/легче всего так, как ты делал.
|
Ответ: Старая песня о главном: Collision
Блин, чувак ну ты и коды пишешь. Зачем проверять на коллизию пули и бота, когда просто с помощью entitypickmode, camerapick весь этот процесс сделать. Если захочется еще предельное расстояние для пули поставить, используй entitydistance. И пожалуйста, читай справку, там всё написано, не знаешь английского, ищи на форуме справку на русском, и тогда вопросов будет меньше
|
Ответ: Старая песня о главном: Collision
это для реалистичной баллистики, в жизньи ведь пули летят по траекторий как пушечные ядра.
|
Ответ: Старая песня о главном: Collision
По-моему все пули летят прямо, исключения сделаны разве что в фильме Особо Опасен. Если ты говоришь о отдаче, то это тоже можно прописать с помощью вышеизложенных функции.
|
Ответ: Старая песня о главном: Collision
hgang
видимо ты еще не учился в 9 классе школы ? там как раз говорят что пули не летают прямо |
Ответ: Старая песня о главном: Collision
FLashMP, Пользуйся лайнпиком (Linepick())
Пуля не сфера а пивот, в каждом цикле проверяешь Linepick() от пивота(пули) до места где будет пуля(пивот) в след цикле и все! И фпс высокий и цель достигнута :) |
Ответ: Старая песня о главном: Collision
Jimon учусь в одиннадцатом классе, с физикой не дружу, так что как летит пуля не очень то и знаю. Куда дуло покажешь, туда и по идее должна полететь, других подробностей не знаю, но был бы рад узнать
|
Ответ: Старая песня о главном: Collision
Цитата:
Пуля из автомата Калашникова летит настолько быстро, что на небольших дистанциях можно обходиться и простым пиком. |
Ответ: Старая песня о главном: Collision
Люди, у меня вопрос. как тут быть?
Вот фрагмент незамысловатого кода: cam=CreateCamera() EntityType cam,Type_player XXX = LoadMesh("XXX.3ds") EntityType XXX,Type_StaticLevel Collisions Type_player,Type_StaticLevel,2,2 ИМХО должно работать, т.е. при столкновении камеры с объектом она не должна проходить сквозь него, а скользить вдоль. Но на практике такого не выходит - камера проходит насквозь Может кто сталкивался? Помогите плиз ) P.S.:Сорь, что не по теме |
Ответ: Старая песня о главном: Collision
не забываем UpdateWorld() перед RenderWorld()
|
Ответ: Старая песня о главном: Collision
Хех) А серьёзно? UpdateWorld() и RenderWorld() стоят, причём стоят на своих местах, и камера движется, но проходит сквозь объект
|
Ответ: Старая песня о главном: Collision
а константы Type_player, Type_StaticLevel определены ??
|
Ответ: Старая песня о главном: Collision
Хм... А это как?
|
Ответ: Старая песня о главном: Collision
О! Всё ясно, заработало )))
|
Ответ: Старая песня о главном: Collision
Код:
Const Type_player=1 |
Ответ: Старая песня о главном: Collision
угу !! был бы компилятор "построже", он бы не скомпилил это !! :)
а так сиди думай в чем проблема !! |
Часовой пояс GMT +4, время: 05:53. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot