背对墙壁的玩家不应碰撞

Player facing away from the wall should not collide

本文关键字:碰撞 玩家      更新时间:2023-09-26

我正在开发我的第一个Javascript游戏。这是一个自上而下的2D视图(想想GTA 1/2(。现在我在碰撞检测方面遇到了问题。我有多个实体,其中一个是玩家,另一个是静态对象(为了简单起见,假设一堵墙(。

每个对象都有 X/Y 坐标,玩家也有速度和角度(玩家从 0-360 度面向哪个方向(。与墙壁的碰撞检测工作正常,如果玩家碰撞,我会在其中一个轴上停止速度,结果玩家可以"滑动"墙壁。

现在来解决问题:一旦玩家再次与墙壁相撞,其中一个轴上的移动就会停止。如果之后的玩家转身背对墙壁,则该轴的移动仍然停止,因为 ha 碰撞。

我希望玩家,如果背对着物体,可以自由移动他想要的方式,我如何实现这一点?我想我需要弄清楚玩家面对的方向,以及他是面对还是远离物体?

for( var i = 0; i < GAME.entities.length; i++ ) {
            if( this._collision( GAME.entities[i] ) ) {
                var distanceX = GAME.entities[i].x - this.x;
                var distanceY = GAME.entities[i].y - this.y;
                if( distanceX < 0 )
                    distanceX *= -1;
                if( distanceY < 0 )
                    distanceY *= -1;
                if( !stopX ) {
                    stopX = ( distanceX > distanceY );
                }
                if( !stopY ) {
                    stopY = ( distanceX < distanceY );
                }
            }
        }

我想出了如何做到这一点:

var degrees = ( Math.atan2( GAME.entities[i].x - this.x, GAME.entities[i].y - this.y ) * 180 / Math.PI ) + this.angle