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

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

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

Ответ
 
Опции темы
Старый 30.07.2009, 18:47   #1
FLashMP
Оператор ЭВМ
 
Регистрация: 02.07.2007
Сообщений: 47
Написано 0 полезных сообщений
(для 0 пользователей)
Сообщение Старая песня о главном: 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, поскольку его уже нет.
Не знаю что уже и делать с этим. Перепробовал много вариантов, но толку мало.
Если кто подскажет, как решить проблему или как обойтись без коллизии, буду очень благодарен.
(Offline)
 
Ответить с цитированием
Старый 30.07.2009, 19:01   #2
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Ответ: Старая песня о главном: Collision

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
цикл в цикле не есть гуд !!
нада что то 1 перебирать !!
(Offline)
 
Ответить с цитированием
Старый 30.07.2009, 20:23   #3
FLashMP
Оператор ЭВМ
 
Регистрация: 02.07.2007
Сообщений: 47
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Старая песня о главном: Collision

Сообщение от IGR Посмотреть сообщение
цикл в цикле не есть гуд !!
нада что то 1 перебирать !!
согласен, что не есть гуд, но у меня масив пуль против масива врагов. Одним циклом никак не получится.
(Offline)
 
Ответить с цитированием
Старый 30.07.2009, 20:55   #4
DeadElf
ПроЭктировщик
 
Регистрация: 22.07.2009
Адрес: Московский Метрополитен)))
Сообщений: 100
Написано 25 полезных сообщений
(для 31 пользователей)
Ответ: Старая песня о главном: Collision

а почему не объявляешь циклы прям сразу в начале функции? так глюков меньше.
и кстати, если удаляешь пулю, удалять её нужно вместе с её типом, насколько помню. также и с врагом, если его нужно удалять, тоже.
то есть:
FreeEntity СамаПуля
Delete ТипСПулями


и кстати, с анимированными моделями коллизии вообще штука проблемная. по крайней мере у меня никогда не срабатывало. может лучше объявить для модели бота вначале какой-нть пивот для столкновений?
(Offline)
 
Ответить с цитированием
Старый 30.07.2009, 21:44   #5
FLashMP
Оператор ЭВМ
 
Регистрация: 02.07.2007
Сообщений: 47
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Старая песня о главном: Collision

Сообщение от DeadElf Посмотреть сообщение
а почему не объявляешь циклы прям сразу в начале функции? так глюков меньше.
не совсем понял. У меня целая функция выделена под циклы с коллизией.

Сообщение от DeadElf Посмотреть сообщение
и кстати, если удаляешь пулю, удалять её нужно вместе с её типом, насколько помню. также и с врагом, если его нужно удалять, тоже.
то есть:
FreeEntity СамаПуля
Delete ТипСПулями
Я так и делаю, просто не хотел загромождать пример.


Сообщение от DeadElf Посмотреть сообщение
и кстати, с анимированными моделями коллизии вообще штука проблемная. по крайней мере у меня никогда не срабатывало. может лучше объявить для модели бота вначале какой-нть пивот для столкновений?
У меня оно тоже страшно глючит.
Раньше пытался двигать простым боксом и коллизить им же, а анимированную модель через parent приклеить. Тоже не особо получалось.
(Offline)
 
Ответить с цитированием
Старый 30.07.2009, 23:07   #6
FLashMP
Оператор ЭВМ
 
Регистрация: 02.07.2007
Сообщений: 47
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Старая песня о главном: Collision

Реализовал сия проект через пивот. Эффект тот же: пуля почему-то скользит по поверхности врага, а обработку явления коллизии отловить не могу
(Offline)
 
Ответить с цитированием
Старый 30.07.2009, 23:44   #7
FLashMP
Оператор ЭВМ
 
Регистрация: 02.07.2007
Сообщений: 47
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Старая песня о главном: Collision

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

Если есть идеи получше, с удовольствием выслушаю
(Offline)
 
Ответить с цитированием
Старый 31.07.2009, 00:33   #8
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: Старая песня о главном: Collision

Этот топ меня пугает, но пост №7 особенно
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

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

(Offline)
 
Ответить с цитированием
Эти 8 пользователя(ей) сказали Спасибо ABTOMAT за это полезное сообщение:
Антихрист (20.08.2009), baton4ik (25.01.2010), FLashMP (07.08.2009), Harter (06.08.2009), Randomize (02.08.2009), Reizel (24.01.2010), tormoz (31.07.2009), ІГРОГРАЙКО (10.10.2009)
Старый 31.07.2009, 01:18   #9
FrankH
Разработчик
 
Регистрация: 09.12.2007
Сообщений: 376
Написано 83 полезных сообщений
(для 122 пользователей)
Ответ: Старая песня о главном: Collision

если одновременно в одного врага попадают 2 пули, выбивает ошибку, что не может удалить enemy\ent, поскольку его уже нет
    obi=(EntityCollided(all\mesh,2))
        If obi Then
            If obi<>all\parent Then

                If all\typ=1 LP#=GP1_power# Else If all\typ=2 LP#=GP2_power# Else If all\typ=3 LP#=GP3_power# Else If all\typ=4 LP#=GP4_power# Else If all\typ=5 LP#=GP5_power#
                u.Unit=Object.Unit(EntityName(obi))
                If u\pivot<>0 Then
                    tmpuron=(LP#*.01*(100-u\shield))
                    u\health#=u\health#-tmpuron;If u\plr=0
                    u\speed#=u\speed#*.6
                    If all\plr Then player_score=player_score+tmpuron
                    CrtPShotSpark(all\mesh,EntityYaw(all\mesh),EntityPitch(all\mesh),200,all\typ)
                     obx=1
                EndIf
            Else
                ResetEntity all\mesh
            EndIf
        EndIf
Я сделал так, помимо того необходимо обрабатывать пули и врагов отдельно друг от друга, и удалять бота не в снарядах а в обработке ботов. Так и быстрее и бот не будет исчезать посреди обработки снарядов.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
FLashMP (07.08.2009)
Старый 02.08.2009, 17:03   #10
Damp
Знающий
 
Регистрация: 12.07.2007
Сообщений: 297
Написано 50 полезных сообщений
(для 133 пользователей)
Ответ: Старая песня о главном: Collision

Сложно сказать, много наворочено
Но проверять лучше пуля к боту, а бот об пулю ни к чему.
Если бот со скином, то нужно найти (FindChild) скин и ему назначать EntityType, это если нужно сфера к полигону. Если достаточно сфера к сфере, то коллизия будет по EntityRadius.
Вобщем есть смысл проверить все на кубиках ) , сразу найдешь что к чему.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
FLashMP (07.08.2009)
Старый 06.08.2009, 09:24   #11
Colossus
Разработчик
 
Аватар для Colossus
 
Регистрация: 12.10.2008
Адрес: Самара
Сообщений: 437
Написано 55 полезных сообщений
(для 92 пользователей)
Ответ: Старая песня о главном: Collision

да, шото странно) ведь у нас пуля с ботом коллизится а не бот с пулей) вот и вычисляй если пуля коснулась бота то убираем бота
__________________
Пекарня: Intel Core i3 - 3240(3.40Ghz), ram 8 gb, video Gigabyte Nvidia GeForce GTX 650 1gb

Лэптоп : Intel Core i3 - 2365(1.40Ghz), ram 4gb, video Int Intel HD3000(512mb)

Мой набор: 3ds Max 9 + Xors3d(Blitz3d) + Photoshop
(Offline)
 
Ответить с цитированием
Старый 07.08.2009, 04:00   #12
FLashMP
Оператор ЭВМ
 
Регистрация: 02.07.2007
Сообщений: 47
Написано 0 полезных сообщений
(для 0 пользователей)
Радость Ответ: Старая песня о главном: Collision

Сообщение от Terminator Посмотреть сообщение
да, шото странно) ведь у нас пуля с ботом коллизится а не бот с пулей) вот и вычисляй если пуля коснулась бота то убираем бота
Сообщение от Damp Посмотреть сообщение
Сложно сказать, много наворочено
Но проверять лучше пуля к боту, а бот об пулю ни к чему.
Эксперимент показывает, что еще даже как "к чему"
если бы это был обычный расстрел ботов, то всё было бы хорошо. А так всё движется, всё коллизится - и всё глючит

Сообщение от Damp Посмотреть сообщение
Если бот со скином, то нужно найти (FindChild) скин и ему назначать EntityType, это если нужно сфера к полигону. Если достаточно сфера к сфере, то коллизия будет по EntityRadius.
Вобщем есть смысл проверить все на кубиках ) , сразу найдешь что к чему.
С кубиками как раз всё работало нормально. А как только загрузил анимацию со скином и ее FindChild"ами, вот тут то всё и началось
(Offline)
 
Ответить с цитированием
Старый 03.10.2009, 18:11   #13
Ky3R_94
Нуждающийся
 
Аватар для Ky3R_94
 
Регистрация: 29.08.2009
Адрес: Україна, Донецьк
Сообщений: 71
Написано 13 полезных сообщений
(для 45 пользователей)
Ответ: Старая песня о главном: Collision

А зачем так над пулями шутить? Я понимаю, если бы были ракеты. Имхо, если стреляешь пулями ты, то лучше реализовывать через CameraPick, а если наоборот (в тебя шмалят боты), то лучше/легче всего так, как ты делал.
(Offline)
 
Ответить с цитированием
Старый 10.10.2009, 18:25   #14
Hurrit
Мастер
 
Аватар для Hurrit
 
Регистрация: 27.01.2008
Адрес: Россия, СКФО, ЧР, Грозный
Сообщений: 1,144
Написано 578 полезных сообщений
(для 2,207 пользователей)
Ответ: Старая песня о главном: Collision

Блин, чувак ну ты и коды пишешь. Зачем проверять на коллизию пули и бота, когда просто с помощью entitypickmode, camerapick весь этот процесс сделать. Если захочется еще предельное расстояние для пули поставить, используй entitydistance. И пожалуйста, читай справку, там всё написано, не знаешь английского, ищи на форуме справку на русском, и тогда вопросов будет меньше
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ABTOMAT (10.10.2009)
Старый 10.10.2009, 21:54   #15
NitE
злобный флудер
 
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений
(для 1,476 пользователей)
Ответ: Старая песня о главном: Collision

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


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
collision Tormaz 3D-программирование 14 10.11.2009 21:45
2d collision Spy4433 2D-программирование 3 10.10.2009 17:44
Старая игра на новом компе Crystal Болтовня 9 01.03.2008 00:26
Collision bot BaD RaNDoM 3D-программирование 2 07.12.2007 13:36
Collision box H@NON 3D-программирование 10 22.06.2007 01:12


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


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