Форум программистов, компьютерный форум, киберфорум
Наши страницы
ActionScript
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
MrDead
16 / 16 / 6
Регистрация: 04.03.2014
Сообщений: 156
1

Проверка на столкновение

08.06.2014, 12:42. Просмотров 1652. Ответов 23
Метки нет (Все метки)

Есть массив со списком объектов на сцене. При нажатии стрелок, эти объекты двигаются, создавая перемещение. В центре сцены есть объект - игрок. Его координаты остаются неизменны, т.к он не входит в массив, а стоит на месте, но при этом ощущение что он движется.

ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
    public function wallplayer(e:Event):void
    {
            for (i = 0; i < platform_obj_wall.length; i++)
            {
                if (bg_igrok.hitTestObject(platform_obj_wall[i]))
                {
            trace("Набежали на стену");
                }
 
        }
    }
Как мне реализовать столкновение игрока со стеной? Трейс работает, то есть если игрок набегает на объект из массива то выводится Набежали на стену. Как мне сделать так, чтобы игрок не мог пройти через эти стены? Что надо дописать?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2014, 12:42
Ответы с готовыми решениями:

Проверка на столкновение
Делаю проверку на столкновение - смысл в том, что в каждый объект вставлен MovieClip под именем hit...

Столкновение объектов
Здравствуйте. Я раньше немного программировала на as2, и сейчас решила освоить as3, пока еще он мне...

Столкновение объектов
Ребят выручайте :) Есть класс Bot и есть класс Bullet. В каждом классе создаются соответсующие...

Реакция на столкновение
Здравствуйте уважаемые гуру!! Задумал я написать реакцию на столкновение, но возникла одна...

Ограничение передвижения и столкновение
Добрый день. Столкнулся с задачей - ограничение передвижения мувика в области с произвольными...

23
bus
34 / 34 / 3
Регистрация: 17.05.2014
Сообщений: 144
08.06.2014, 12:58 2
Расскажите подробнее, как у Вас стены двигаются, как Вы определяете, что сейчас нужно вывести стену?
0
MrDead
16 / 16 / 6
Регистрация: 04.03.2014
Сообщений: 156
08.06.2014, 13:25  [ТС] 3
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if (right_press_platform) //Двигаем платформу в правую сторону
            {
                for (i = 0; i < len_1; i++)
                {
                    bg_locations.bg_conf.platform_obj[i].x -= speed_platform;
                    Bg_Location.bg_play.rotation = -90;
                }
                
                for (i = 0; i < len_2; i++)
                {
                bg_locations.bg_conf.platform_obj_wall[i].x -= speed_platform;
                
                }
                
            }
platform_obj_wall - массив с объектами стен
platform_obj - массив с остальными объектами не относящиеся к стенам.
0
bus
34 / 34 / 3
Регистрация: 17.05.2014
Сообщений: 144
08.06.2014, 13:46 4
аааа... я немного вопроса не понял. Подумал, что Вы спрашиваете, как столкновения проверять...
А чтобы не проходил через стены, Вам первым делом нужно "выталкнуть" персонажа из стены ( бывает так,
что персонаж находит на стену ), а потом остановить перемещение стен.
0
MrDead
16 / 16 / 6
Регистрация: 04.03.2014
Сообщений: 156
08.06.2014, 13:57  [ТС] 5
ActionScript 3
1
2
3
4
if (bg_play.hitTestObject(bg_locations.bg_conf.platform_obj_wall[i]))
                {
                 player_go = false;
                }
Попробовал таким способом, то есть кнопки работают, только если player_go = true, иначе они не срабатывают. У стены то он останавливается, но уже не двинуться с места) Даже если добавлю
ActionScript 3
1
2
3
4
else
{
player_go = true;
}
То продолжает ходить сквозь стены)
0
bus
34 / 34 / 3
Регистрация: 17.05.2014
Сообщений: 144
08.06.2014, 14:14 6
Тут нужно больше подробностей, так-как вариантов решения очень много и почти все они очень простые,
но призваны решать разные задачи.
У Вас стены все прямоугольные? Проверку нужно делать на пересечение только со стенами или ещё полом и потолком?
0
MrDead
16 / 16 / 6
Регистрация: 04.03.2014
Сообщений: 156
08.06.2014, 14:25  [ТС] 7
Стены прямоугольные, квадратные. Проверку надо делать только на пересечение со стенами
0
bus
34 / 34 / 3
Регистрация: 17.05.2014
Сообщений: 144
08.06.2014, 14:29 8
Сейчас сделаю минимальный пример...

Добавлено через 3 минуты
Только ещё один вопрос - пол прямой или есть под углом?
Если есть участки пола под углом, то существуют места, где косой пол упирается в стену?
0
MrDead
16 / 16 / 6
Регистрация: 04.03.2014
Сообщений: 156
08.06.2014, 14:39  [ТС] 9
Так думаю будет показательней))
0
Миниатюры
Проверка на столкновение  
bus
34 / 34 / 3
Регистрация: 17.05.2014
Сообщений: 144
08.06.2014, 18:26 10
Оказалось сложнее чем я себе представлял Точнее сказать я не ожидал вид сверху
Но у меня получилось, правда я бы так делать не стал, но для понимания подойдет. Только ещё чуток подумаю и покажу.
0
MrDead
16 / 16 / 6
Регистрация: 04.03.2014
Сообщений: 156
08.06.2014, 18:36  [ТС] 11
Хорошо, я и сам уже тучу способов перепробовал, надо как-то запретить двигать платформу, если игрок намеренно упирается в стену, а вот как реализовать я что-то не представляю))
0
Theoryofgames
253 / 237 / 50
Регистрация: 20.12.2011
Сообщений: 707
09.06.2014, 00:10 12
Как вариант - при столкновении проверяем координаты x и y персонажа и стены. В том случае, если координаты x стены меньше координаты x персонажа - запрещает только движение налево, если x стены больше х персонажа - запрещаем движение направо. Аналогично для y.
0
bus
34 / 34 / 3
Регистрация: 17.05.2014
Сообщений: 144
09.06.2014, 00:19 13
MrDead, я не буду Вам пример делать То что я сделал, когда сказал о еще немного времени, сделал неправильно, не учел, что есть стены, которые находятся внутри коробки. И так же я опять забыл о том, что у Вас
фон двигается, а не персонаж.
Как только я это понял, я немного отвлёкся на другие дела и как раз думал.
Сел и сделал контейнер, в который помещается прямоугольный предмет и создаются опорные точки,
которые вертятся вместе с объектами и по которым уже и проверяют столкновения.
Сделал контроллер стен и героя. Все что мне осталось, это нарисовать четыре стены для коробки и ещё одну поместить в саму коробку и испробовать, хотя я знаю что получится.

В общем, я хоть и сказал не буду делать пример, но пока писал, подумал, что ведь обещал...
По этому у меня к Вам вопрос - собираетесь ли Вы и в будущем делать игры и обязательно ли Вам нужно
сделать эту игру самому?
Объясню к чему эти вопросы - есть замечательный, ЛУЧШИЙ физический движок Nape, это предел физики!
И если Вы собираетесь и дальше делать, то учите лучше его, пользы будет больше. Если Вы хотите сами свё сделать с целью самообразования, то я скажу так - если Вы с лёгкостью можете находить косинусы и синусы без класса Math и умеете управлять векторным пространством, то мой пример может послужить неким пособием...
Но если нет, то он обяжет Вас учить все с нуля и потратить на это месяц-другой, за чтением литературы по векторной алгебре-геометрии. И не подумайте что я Вас пугаю, говорю я это по тому, что после того, как я доделаю пример, Вам самим придется проделать титанический труд. Оптимизировать код ( я скажу что нужно сделать ), наладить иерархию отображения ( если проверять с сотнями стен в массиве 60 раз за кадр, то все упадет, нужно будет придумать и сделать так, чтобы проверялось только с тем, что находится в списке отображения ). И делать все это за Вас я не буду, так-как займет это пару дней и по сути это будет микро-физический движок для игр вида сверху. В Nape это уже все есть...


Вот... Вы не пугайтесь, и если Вам нужно и есть желание учится, то скажите и я доделаю. Тем более что делать там осталось пару часов. Если честно то я такое давно не делал и признаться честно немного подзабыл, но для меня это было полезно.

Добавлено через 7 минут
Theoryofgames, персонаж двигается на 360 градусов стоя всегда в центре.
Стены не только коробка, а еще и везде. И получается, что персонаж может боком подойти к стене, а может и стена боком под глом зайти
Нативные проверки тут не подходят.. Хотя, вот сейчас я подумал и мне кажется, что если оставить мой контейнер с точками и отказаться от своей идеи, где я хотел каждую точку проверять на принадлежность к выпуклым многоугольникам, то скорее всего hitTestPoint победит....
1
MrDead
16 / 16 / 6
Регистрация: 04.03.2014
Сообщений: 156
09.06.2014, 00:54  [ТС] 14
bus, Да, мне это нужно и желание есть. Буду благодарен за оказанную помощь)
1
bus
34 / 34 / 3
Регистрация: 17.05.2014
Сообщений: 144
09.06.2014, 01:07 15
Завтра обязательно в перерывах сделаю. До завтра!
0
TanaTiX
Модератор
2798 / 1655 / 168
Регистрация: 19.02.2011
Сообщений: 6,018
Завершенные тесты: 2
09.06.2014, 09:04 16
Цитата Сообщение от bus Посмотреть сообщение
ЛУЧШИЙ физический движок Nape
Откуда такая информация?
Цитата Сообщение от bus Посмотреть сообщение
если проверять с сотнями стен в массиве 60 раз за кадр, то все упадет, нужно будет придумать и сделать так, чтобы проверялось только с тем, что находится в списке отображения
Как все сложно. Задача вообще может решаться без отображения (в зависимости от входных данных).
Допустим стены и пр. окружение генерируется программно (судя по тому, что ТС проверяет каждую стену отдельно это может соответствовать истине). Даже не важно что и как, важно, что бы был массив объектов с известными координатами. Пусть это будут ячейки с координатами и параметром занято/свободно. Соответственно при движении персонажа в какую-то сторону мы знаем в какую ячейку он может перейти (при движении по диагонали это 2 ячейки). В результате нам необходимо проверить максимум 2 ячейке,а не перелопачивать их целый массив. Это гораздо проще. Даже если реализовано не совсем так - к такому положению можно все равно свести, при этом пусть не будет у нас 1-2-х ячеек, но их все равно будет гораздо меньше, чем все.
А вот стены относительно сцены движутся или персонаж - это вопрос исключительно отображения.
0
bus
34 / 34 / 3
Регистрация: 17.05.2014
Сообщений: 144
09.06.2014, 20:19 17
MrDead, жутко извиняюсь за неоправданные надежды, но я лучше признаю, что у меня не получается,
чем буду продолжать делать монстра.
И дело не в том, что не получается, а в том, что я не могу делать неправильно! Мне это совесть не позволяет.

Послушайте TanaTiX'а, он полностью прав! Мой вариант только время Ваше потратит и мои нервы,
так-как я его делаю, а у меня сразу в голове включается, что делаю я неправильно. Нельзя Ваш пример как пример,
я делаю его и понимаю, что если сделаю "на отстань", то он Вам все сознание поломает. А если делать как нужно,
то я понимаю, что у меня время на это нет, так-как вчерашний пример на 4 точках не работает, на поворотах проваливается. на 8, тоже! Их нужно сделать минимум 12 на квадрат, а это, как уже сказали, извращение.

Добавлено через 3 часа 41 минуту
Все не как не могу забыть и в очередной нападок мыслей, когда начал оправдывать себя, то понял, что даже в
совете допустил ошибку! Не тайлы, а графы!
TanaTiX, я никогда не работал с графами, точнее, в самом начале делал что-то невнятное...
Посоветуйте лучшие по Вашему мнению статьи и готовые решения, чтобы изнутри посмотреть на них.
0
TanaTiX
Модератор
2798 / 1655 / 168
Регистрация: 19.02.2011
Сообщений: 6,018
Завершенные тесты: 2
09.06.2014, 20:26 18
bus, почему все нужно сводить к графам? Чем тайлы не устраивают? А на счет статей, так я такие ссылки не храню. Когда-то читал в интернетах, общую мысль запомнил, а дальше самостоятельно.
0
bus
34 / 34 / 3
Регистрация: 17.05.2014
Сообщений: 144
09.06.2014, 20:48 19
TanaTiX, а это разные вещи?) Графы, это математические классы, к которым привязывают виды и уже дальше с ними работают.. Они помогают в поиске путей, сортировке видов и возможно ещё и ещё чего-то.
Но что тогда такое тайлы? Вот на сколько я на сейчас могу себе объяснить понятие тайл, то это всего лишь квадратик пикселей, рисунок. Если исходить из ещё большей фантазии, то весь игровой мир поделен на кусочки-тайлы... Но ведь тайлы это же рисунки, как ими можно считать? Чего я пока не знаю?
0
TanaTiX
Модератор
2798 / 1655 / 168
Регистрация: 19.02.2011
Сообщений: 6,018
Завершенные тесты: 2
09.06.2014, 21:55 20
bus, тайлы удобно представить как пиксели - т.е. прямоугольные области. При этом рядом с пикселем с координатами (0,0) будут пиксели с координатами (0,1) и (1,0). Т.е. имеем четкую пространственную структуру. Касательно графов (на сколько я знаю, т.к. реально с ними работать и не приходилось), то их соседи могут отличаться, как количество соседей, так и условное расстояние до них, в то время как в случае с тайлами расстояние между ними постоянно.
Описание графа на вики. Там еще картинка наглядная
0
09.06.2014, 21:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2014, 21:55

Столкновение двух объектов
Как можно определить пересекаются 2 объекта или нет. Сами мувиклипы разной формы. hitTest не...

Проверка на столкновение кнопок
Привет! Вот какой вопрос. Как выглядит проверка на столкновение двух кнопок? т.е. Есть две кнопки и...

Столкновение
Вообщем знаю прозвучит глупо, но попытаюсь обьяснить. У меня есть 2 класса наследники...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru