Форум программистов, компьютерный форум, киберфорум
ActionScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
16 / 16 / 6
Регистрация: 04.03.2014
Сообщений: 160

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

08.06.2014, 12:42. Показов 3785. Ответов 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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.06.2014, 12:42
Ответы с готовыми решениями:

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

Проверка на столкновение
Привет всем, кто может подсказать как проверить на столкновение 2 объекта не использовав Collider и Raycast. Спасибо всем.

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

23
bus
34 / 34 / 3
Регистрация: 17.05.2014
Сообщений: 144
09.06.2014, 22:10
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от TanaTiX Посмотреть сообщение
Там еще картинка наглядная
Покажите мне тогда про тайлы?
0
Модератор
 Аватар для TanaTiX
2939 / 1800 / 180
Регистрация: 19.02.2011
Сообщений: 6,556
09.06.2014, 22:16
Тайловая графика
0
16 / 16 / 6
Регистрация: 04.03.2014
Сообщений: 160
09.06.2014, 23:07  [ТС]
Можно засунуть все объекты и игрока платформы в один спрайт и двигать спрайт, таким образом можно будет посмотреть нынешние координаты платформы. Но как мне двигать вместе с платформой и персонажа, иначе он просто стоит на месте, ведь движется вся платформа.
0
bus
34 / 34 / 3
Регистрация: 17.05.2014
Сообщений: 144
09.06.2014, 23:46
MrDead, я так и делал, скомпоновал все кубики в большие блоки-спрайты и эти большие блоки поместил в один, общий для всех блоков спрайт-контейнер. Затем у персонажа я сделал четыре состояния, вперед, назад, вправо и влево и по нажатию кнопки запускал нужный метод соответствующий состоянию. Так же в персонаже я переопределил геттеры, которые возвращали свойство созданное в персонаже и меняющиеся в методах вперед++, назад--. Тут я сделаю акцент, чтобы Вы поняли принцип - когда я запрашиваю координаты персонажа,
то возвращает мне координаты (0, 0), хотя персонаж стоит по центру сцены, так-как сеттеры я ему оставил правильные. И вот получается, что стоит он по центру, а координаты (0, 0) и сам он у меня не ходит! В методах вперед и назад я просто увеличиваю или уменьшаю свойство, которое возвращается через геттер. Персонаж на месте, а координаты меняются так, как-будто он ходит.
В методах разворота я вращал скин персонажа, который так же находился в классе персонаж.
Затем я создал класс "контроллер мира", в который передал ссылку на класс "персонаж" и класс "контейнерСтен", который предварительно я тоже выставил по координатам так, как мне было нужно.
Затем в методе ините я определил вектор разности между персонажем и контейнером со стенами, который
сравнивал координатные пространства.
А вот уже потом, когда я нажимал на кнопку идти вперед, то первым делом вызывал метод в контроллере мира update():Boolean, в котором делал следующее -
1) находил вектор разности между персонажем и стенами.
2) делал его зеркальное отражение ( это важно для правильного движения стен )
3) прибавлял к этому вектору шаг, который делает персонаж за один кадр.
4) проверял на столкновение ( получилось, что на шаг вперед ) и если там стена, то я возвращал false
5 ) если столкновения не было, то я прибавлял этот вектор к координатам контейнера со стенами.

И вот, возвращаемся в метод обработчик ентерФраме из которого я и вызывал метод update():Boolean.
Если мне возвращалось false, то я прерывал выполнение кода, если true, то я вызывал соответствующий метод
у объекта персонажа.

То есть, я нажал вперед, проверил может ли персонаж идти, если может то я двигал контейнер, а затем двигал персонажа, если же персонаж не мог идти я прерывал код.

Но это неправильно!!! Таким способом можно проверять контейнер даже без массива, hitTestPoint проверяет и на пустоту и на рамку и если бы была одна точка, то было бы все лучше не придумаешь!
Но точек нужно ооочень много! И сколько бы я не делал у меня все равно получалось провалить персонаж.

Чтобы его вернуть, это уже нужно возвращаться к массиву со всеми стенами и и там искать с какой именно он столкнулся, узнавать его размеры и высчитывать каждую его сторону как прямую, затем искать с какой именно прямой он пересекся ( это затратно ), на сколько пересекся...
И вот тут у меня и началась заминка из-за которой я в итоге снес весь код и в бешенстве начал себя оправдывать, что голова другим забита
Если честно, то я не делал его возврата после проваливания, так-как в голове не мог решить следующие шаги.
Если бы я нашел этот вектор возврата, то из мира не мог бы переместить персонажа, так-как он мог быть повернут, а миру нельзя знать как повернут персонаж и стенам тоже, так-как им пофигу какой ты стороной врезался им нужно тебя лишь оттолкнуть...................
И вот это я не мог решить, хотя сейчас сижу и угараю, так-как затупил ужасно....
Мне же не персонажа нужно было двигать, а стены А стены, как раз подпадают под законы мира и там даже поворот бы высчитывать не нужно было, вектор то остался, нужно было лишь вычесть из вектора вектор, а потом отнять или прибавить к координатам контейнера со стенами.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.06.2014, 23:46

Проверка на столкновение картинок
Проверка на столкновение картинок , есть 1 машинка которой управляю и остальные картинки в статистическом состоянии , нужно что бы когда...

Столкновение
if ((obj1.x + obj1.width &gt;= obj2.x) &amp;&amp; (obj1.x &lt;= obj2.x + obj2.width)) XColl = true; if ((obj1.y + obj1.height &gt;= obj2.y) &amp;&amp; (obj1.y &lt;=...

Столкновение
Здравствуйте. У меня возникла проблема. Я хочу сделать так чтобы при столкновение он как бы подбирался(например оружие). Для начала...

столкновение
Ф ребята, я вот хочу написать примитивную игру, типа гонки(так сказать) на С++, но никак не могу реализовать сталкивание(((... Посмотрите...

Столкновение
Есть несколько предметов. Я одел на каждый BoundingBox и на обьект которым я управляю. Только вот проблема, столкновение отрабатывается...


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru