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

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

08.06.2014, 12:42. Просмотров 1589. Ответов 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
Ответы с готовыми решениями:

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

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

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

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

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

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

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

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

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

Чтобы его вернуть, это уже нужно возвращаться к массиву со всеми стенами и и там искать с какой именно он столкнулся, узнавать его размеры и высчитывать каждую его сторону как прямую, затем искать с какой именно прямой он пересекся ( это затратно ), на сколько пересекся...
И вот тут у меня и началась заминка из-за которой я в итоге снес весь код и в бешенстве начал себя оправдывать, что голова другим забита
Если честно, то я не делал его возврата после проваливания, так-как в голове не мог решить следующие шаги.
Если бы я нашел этот вектор возврата, то из мира не мог бы переместить персонажа, так-как он мог быть повернут, а миру нельзя знать как повернут персонаж и стенам тоже, так-как им пофигу какой ты стороной врезался им нужно тебя лишь оттолкнуть...................
И вот это я не мог решить, хотя сейчас сижу и угараю, так-как затупил ужасно....
Мне же не персонажа нужно было двигать, а стены А стены, как раз подпадают под законы мира и там даже поворот бы высчитывать не нужно было, вектор то остался, нужно было лишь вычесть из вектора вектор, а потом отнять или прибавить к координатам контейнера со стенами.
0
09.06.2014, 23:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2014, 23:46

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

Столкновение объектов неправильной формы
Здравствуйте. Есть два объекта неправильной формы. Если я использую код:...

Столкновение с двумя и более объектами
Добрый вечер помогите с одной задачей вот я пишу код: import...


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

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

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