16 / 16 / 6
Регистрация: 04.03.2014
Сообщений: 160
|
||||||
1 | ||||||
Проверка на столкновение08.06.2014, 12:42. Показов 3159. Ответов 23
Метки нет (Все метки)
Есть массив со списком объектов на сцене. При нажатии стрелок, эти объекты двигаются, создавая перемещение. В центре сцены есть объект - игрок. Его координаты остаются неизменны, т.к он не входит в массив, а стоит на месте, но при этом ощущение что он движется.
0
|
08.06.2014, 12:42 | |
Ответы с готовыми решениями:
23
Проверка на столкновение Проверка на столкновение Проверка на столкновение кнопок Проверка на столкновение картинок |
Модератор
2904 / 1763 / 179
Регистрация: 19.02.2011
Сообщений: 6,477
|
|
09.06.2014, 22:16 | 22 |
0
|
16 / 16 / 6
Регистрация: 04.03.2014
Сообщений: 160
|
|
09.06.2014, 23:07 [ТС] | 23 |
Можно засунуть все объекты и игрока платформы в один спрайт и двигать спрайт, таким образом можно будет посмотреть нынешние координаты платформы. Но как мне двигать вместе с платформой и персонажа, иначе он просто стоит на месте, ведь движется вся платформа.
0
|
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 | |
09.06.2014, 23:46 | |
Помогаю со студенческими работами здесь
24
Столкновение Столкновение столкновение Столкновение Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |