Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   отбивание шарика от линии (http://www.flasher.ru/forum/showthread.php?t=206392)

Wadimir 01.02.2014 16:49

отбивание шарика от линии
 
Приветствую!
Не получается решить одну проблему. Есть шарик который двигается. При столкновении с линией, он должен правильно отбиться. Почему то в моём коде это не происходит. Где у меня ошибка?

Код AS3:

ball.rotation = 90;
 
addEventListener(Event.ENTER_FRAME, onEnterFrame);
 
function onEnterFrame(event:Event):void
{
        moveBall();
 
        if(/*столкновение произошло*/) {
                reflection(new Point(ball.x, ball.y));
        }
}
 
function reflection(pt:Point):void
{
        var x:Number = pt.x;
        var y:Number = pt.y;
        var perpendicular:Number = ball.rotation - Math.PI / 2;
        var iangle:Number = Math.atan2(y, x);
        var rangle:Number = 2 * perpendicular - iangle;//угол падения равен углу отражения;
 
      ball.rotation = rangle;
}
 
function moveBall():void
{
        var radians:Number = ball.rotation*Math.PI/180;
        var vectorX:Number = Math.cos(radians);
        var vectorY:Number = Math.sin(radians);
 
        var speed:Number = 2;
        ball.x += speed*vectorX;
        ball.y += speed*vectorY;       
}


FlasherEgor 01.02.2014 17:08

А где функция, что проверяет, произошло ли столкновение? Или она без проблем работает?

Wadimir 01.02.2014 17:12

Цитата:

Сообщение от FlasherEgor (Сообщение 1158651)
А где функция, что проверяет, произошло ли столкновение? Или она без проблем работает?

та функция работает правильно и я подумал что не нужно её здесь описывать. Вопрос ведь не про столкновение, а про отбивание.

FlasherEgor 01.02.2014 18:22

Может, дело в
Код AS3:

var perpendicular:Number = ball.rotation - Math.PI / 2;

Rotation ведь, насколько я помню, в градусах, а Math.PI - радианы...

Wadimir 02.02.2014 12:40

так как правильно посчитать?

RandomUser 02.02.2014 15:00

А от какой линии шарик должен отталкиваться?

Akopalipsis 02.02.2014 16:53

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

Добавлено через 31 секунду
Может кто-то хоть последовательность правильную подскажет.

Wadimir 03.02.2014 12:10

так мяч и должен вращаться. Это может быть и не мяч, а машинка, которая разворачивается и едет в другую сторону.

Akopalipsis 03.02.2014 16:41

Вложений: 3
Если что-то не понятно, то спрашивайте.
Картинки png, почему они с белым фоном на форуме?

alexcon314 03.02.2014 17:51

Wadimir, вы, часом, не из этой темы функцию reflection попытались использовать? Так оно и там не работало. :)
Обратите внимание на пост №3
из той же темы. Там есть рациональное зерно, и если вы немного переосмыслите подход к реализации геометрии на плоскости, вам может это помочь.

Akopalipsis, не устаете меня поражать.

Akopalipsis 03.02.2014 18:01

Что не так?

alexcon314 03.02.2014 19:09

Эмм... ну как бы... очень мощно. Впечатляет.
Хотелось бы увидеть ссылку на первоисточник, где все, что вы нарисовали, изложено. Ну, или на основе чего вы это нарисовали. Вы, кажется, упоминали статью на хабре.
Добавлю еще одну ссылку по теме от себя.

Akopalipsis 03.02.2014 19:26

Вот Когда не нужна тригонометрия. Тут просто немного всё разбросанно и лично мне пришлось пол дня решать. все конечно не я, но я навсякий случай на координатах показал. И за ссылку спасибо, мне такое очень интересно.


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

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