Старая песня о главном: 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
это для реалистичной баллистики, в жизньи ведь пули летят по траекторий как пушечные ядра.
|
Часовой пояс GMT +4, время: 15:35. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot