как решить проблему реакции на столкновение? - PullRequest
1 голос
/ 13 июля 2020

Im, использующий обнаружение столкновений, представляет собой методику обнаружения столкновений AABB между двумя квадратами, я, кажется, не могу решить эту проблему, когда обнаруживаются столкновения сторон, и квадраты застревают по краям, а столкновение происходит по краю, пока квадраты не пройдут вдоль y-axis.i также выделила проблемную область ------- проблема -------

Как решить эту проблему? пожалуйста, проверьте ссылку, чтобы лучше понять мою проблему https://qwtfy.github.io/

const canvas=document.getElementById('canvas');
const ctx=canvas.getContext('2d');

square1={
    h:100,
    w:100,
    dx:2,
    dy:4,
    x:0,
    y:0
}
square2={
    h:100,
    w:100,
    dx:-2,
    dy:-2,
    x:200,
    y:250
}

function drawSquare(){
    ctx.beginPath();
    ctx.rect(square1.x,square1.y,square1.w,square1.h);
    ctx.fillStyle='#000';
    ctx.rect(square2.x,square2.y,square2.w,square2.h);
    ctx.fillStyle='#000';
    ctx.fill();
    ctx.closePath();
}

function moveSquare(){
    square1.x+=square1.dx;
    square1.y+=square1.dy;
    square2.x+=square2.dx;
    square2.y+=square2.dy;

    // left right wall collision
    if(square1.x<0 || square1.x+square1.w>canvas.width)
        square1.dx*=-1;
    if(square2.x<0 || square2.x+square2.w>canvas.width)
        square2.dx*=-1;

    // top bot wall collsion 
    if(square1.y<0 || square1.y+square1.h>canvas.height)
        square1.dy*=-1;
    if(square2.y<0 || square2.y+square2.h>canvas.height)
        square2.dy*=-1;
 // -------problem-------
        // square to square collsion

        // sides
        if(square2.x<square1.x+square1.w&&square1.x<square2.x+square2.w&&(Math.abs(square1.y-square2.y)<70))
            {
                console.log('sides');
                // console.log(square1.x,square1.x+square1.w,square2.x)
                square1.dx*=-1;
                square2.dx*=-1;
            }
        else if((square2.y+square2.dy<=square1.y+square1.dy+square1.h&&square1.y+square1.dy<=square2.y+square2.dy+square2.h) && (Math.abs(square1.x-square2.x)<70))
            {
                console.log('tops');

                square1.dy*=-1;
                square2.dy*=-1;
            }

 // -------problem-------
}

function update(){
    ctx.clearRect(0,0,canvas.width,canvas.height);
    drawSquare();
    moveSquare();
    requestAnimationFrame(update);
}
  
update();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...