2D-игра ответ на столкновение - PullRequest
1 голос
/ 20 сентября 2011

Итак, я пишу игру, но я подошел к той части, где мне нужно было дать ответ на столкновение, и я был в тупике.У меня есть алгоритм, который находит угол столкновения объектов, и глубину столкновения, означающую, сколько два объекта на круге.Я понимаю, что я хочу сделать, и это найти перпендикулярный вектор к углу столкновения и оттолкнуть объект, который сталкивается с его глубиной столкновения, но я просто не могу написать это правильно.Вот код, с которым я сейчас работаю.

var collision:Object = collisions[i];

    var angle:Number = collision.angle;

    var overlap:Number = collision.overlapping.length;

    trace(overlap);
    trace(angle);
    var moveX = Math.cos(angle) * overlap; 
    var moveY = Math.sin(angle) * overlap;

    obj2.x -= moveX;
    obj2.y += moveY;

В основном я просто хочу, чтобы объект, который сталкивается со стеной, останавливался, когда он ударялся о нее.

любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 13 октября 2011

Итак, после нескольких часов настройки кода, я нашел решение, которое работает хорошо. вот мой новый код:

public function Colisions(obj1,obj2) {
        var collisions:Array=MyCollision.checkCollisions();
        for (var i = 0; i  < collisions.length; i++) {
            var collision:Object=collisions[i];
            var angle:Number=collision.angle;
            var overlap:Number=collision.overlapping.length;
            // finds the amount in x and y coordinates to move the ball back, and it devides overlap by 20 so that the ball does not jump as much. 
            var moveX=Math.cos(angle)*(overlap/20);
            var moveY=Math.sin(angle)*(overlap/20);
            // sets the ball to it's original location before the colision.
            obj2.x=obj2.x-moveX;
            obj2.y=obj2.y-moveY;


        }
    }

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

0 голосов
/ 20 сентября 2011

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

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

И если вы решите эту проблему полностью, пожалуйста, сообщите мне решение.

swf (с трением, это больше проблемы): http://nafiz.in/collision/carpisma.swf

swf (без трения, это не проблема, чем первый.): http://nafiz.in/collision/carpisma_surtunmesiz.swf

q: добавить шар в месте мыши.w, a, s, d: controll # 1 ball.

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

Трески: http://nafiz.in/collision/collision.rar

Надеюсь, вы решите.

...