Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   .rotation после столкновения. (http://www.flasher.ru/forum/showthread.php?t=147484)

ehluu 05.12.2010 21:51

.rotation после столкновения.
 
Добрый день.
Столкнулся с проблемой определения .rotation объекта (в моём случае это шар) после столкновения с другими объектами (стены, потолки, прочее). С изменением положения (х, у) всё понятно, а вот с углом поворота - нет; крутил, вертел, подбирал условия - ничего не выходит.

Если я плохо объяснил, то вот картинка:

http://cs10145.vkontakte.ru/u1494130...x_7be060d2.jpg

Может быть, кто-то уже сталкивался с этой проблемой или знает, как её решить. Буду благодарен за ответы, наводки :)

drnet_ua 05.12.2010 22:05

а в чем проблемма?

КорДум 05.12.2010 22:05

Дык это, угол падения равен углу отражения.

drnet_ua 05.12.2010 22:06

http://ru.wikipedia.org/wiki/%D0%9E%...D0%BA%D0%B0%29

samana 05.12.2010 22:07

Так вроде про вращение объекта спрашивают, а не про угол отскока.

КорДум 05.12.2010 22:08

Знаете угол отскока, прибавляете к текущему повороту - все.

-De- 05.12.2010 22:50

При идеально упругом ударе шарик не крутится вообще. Можете сделать вращение по часовой стрелке (при соударении как на рис.) после удара, если не нравится, что не крутится.

ehluu 06.12.2010 09:45

Цитата:

Сообщение от -De- (Сообщение 955236)
При идеально упругом ударе шарик не крутится вообще. Можете сделать вращение по часовой стрелке (при соударении как на рис.) после удара, если не нравится, что не крутится.

Крутиться не должен, конечно, но игровая механика требует, чтобы объект смотрел в сторону своего движения.

В общем, меня немного сбила с толку вариация угла во флеш от 0 до -180 и от 180 до 0.
Код AS3:

if (hero.x + heroRadius > right) {
        hero.x = right - heroRadius;
        hero.rotation = 180 - hero.rotation;
} else if (hero.x - heroRadius < left) {
        hero.x = left + heroRadius;
        hero.rotation = 180 - hero.rotation;
} else if (hero.y - heroRadius < top) {
        hero.y = top + heroRadius;
        hero.rotation *= -1;
} else if (hero.y + heroRadius > bottom) {
        hero.y = bottom - heroRadius;
        hero.rotation *= -1;
}

От границ сцены отскакивает корректно, но ведь помимо этого есть наклонные и дугообразные поверхности, как тогда быть?

Цитата:

Сообщение от КорДум (Сообщение 955227)
Знаете угол отскока, прибавляете к текущему повороту - все.

Звучит просто, но я не понял. Можно как-то с алгоритмом? Возможно и другие вопросы отпадут.

КорДум 06.12.2010 10:11

Кодом не помогу, так как нет времени сейчас писать его. Но помогу словесно: Вам дали подсказку, даже ссылку дали. Простейшая физика-математика. 0 градусов, как правило, это когда клип смотрит вправо. Ну вот и смотрим, зная угол текущего поворота, насколько он должен отскочить - угол падения равен углу отражения. Если поворот объекта от [-180, 0], то вычитаем текущий угол из угла поворота. Если [0, 180] - прибавляем. Возможно я ошибся со знаками, вам это нужно проверить.

-De- 06.12.2010 11:25

Не, ну если вы не псих, то вы знаете направление его движения) Ну скорость там, например, Vx, Vy.
Считаете же как-то после столкновений и пр. Тогда угол поворота
hero.rotation = Math.atan2(Vy, Vx) * 180 / Math.PI + add;
add - угол в градусах между осью х и тем местом, которым он будет смотреть по направлению движения.

ehluu 06.12.2010 16:22

Ну, будучи психом ^_^, я считал сначала угол (направление движения определялось кликом мышки), а потом по этому углу считал шаг по Х и У. Теперь всё переделал, работает.


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

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.