C#碰撞,如果布尔值表示他可以';我不能向右移动

C#碰撞,如果布尔值表示他可以';我不能向右移动,c#,C#,所以这是我目前正在做的一个游戏,我需要进行碰撞和移动,但是当我在墙的两边碰撞时(从墙列表中),它会停止移动我的玩家,但是如果我一直按住键,玩家将完全移动通过 这是移动和碰撞的代码: bool left = false; bool up = false; bool right = false; bool down = false; private void Form1_KeyDown(object sender, KeyEventArgs e) {

所以这是我目前正在做的一个游戏,我需要进行碰撞和移动,但是当我在墙的两边碰撞时(从墙列表中),它会停止移动我的玩家,但是如果我一直按住键,玩家将完全移动通过

这是移动和碰撞的代码:

    bool left = false;
    bool up = false;
    bool right = false;
    bool down = false;

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        #region Movement
        if (e.KeyCode == Keys.D && !right)
        {
            right = true;
        }

        if (e.KeyCode == Keys.A && !left)
        {
            left = true;
        }

        if (e.KeyCode == Keys.W)
        {
            up = true;
        }

        if (e.KeyCode == Keys.S)
        {
            down = true;
        }
        #endregion
    }

    public void Collision()
    {
        for (int x = 0; x < walls.Count; x++)
        {
            if (player.obj.Bounds.IntersectsWith(walls[x].Bounds) && right)
            {
                right = false;
            }

            if (player.obj.Bounds.IntersectsWith(walls[x].Bounds) && left)
            {
                left = false;
            }

            if (player.obj.Bounds.IntersectsWith(walls[x].Bounds) && up)
            {
                up = false;
            }

            if (player.obj.Bounds.IntersectsWith(walls[x].Bounds) && down)
            {
                down = false;
            }
        }
    }

    private void Form1_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.D)
        {
            right = false;
        }

        if (e.KeyCode == Keys.A)
        {
            left = false;
        }

        if (e.KeyCode == Keys.W)
        {
            up = false;
        }

        if (e.KeyCode == Keys.S)
        {
            down = false;
        }
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        #region True
        if (right)
        {
            Point loc = player.obj.Location;
            loc.X = loc.X + 4;
            player.obj.Location = loc;
        }

        if (left)
        {
            Point loc = player.obj.Location;
            loc.X = loc.X - 4;
            player.obj.Location = loc;
        }

        if (up)
        {
            Point loc = player.obj.Location;
            loc.Y = loc.Y - 4;
            player.obj.Location = loc;
        }

        if (down)
        {
            Point loc = player.obj.Location;
            loc.Y = loc.Y + 4;
            player.obj.Location = loc;
        }
        #endregion

        #region  NotTrue
        if (!right)
        {
            Point loc = player.obj.Location;
            loc.X = loc.X + 0;
            player.obj.Location = loc;
        }

        if (!left)
        {
            Point loc = player.obj.Location;
            loc.X = loc.X - 0;
            player.obj.Location = loc;
        }

        if (!up)
        {
            Point loc = player.obj.Location;
            loc.Y = loc.Y - 0;
            player.obj.Location = loc;
        }

        if (!down)
        {
            Point loc = player.obj.Location;
            loc.Y = loc.Y + 0;
            player.obj.Location = loc;
        }
        #endregion

        Collision();
    }
}
}
bool left=false;
bool up=false;
布尔右=假;
bool down=错误;
私有void Form1\u KeyDown(对象发送方,KeyEventArgs e)
{
#区域运动
if(e.KeyCode==Keys.D&&!right)
{
右=真;
}
if(e.KeyCode==Keys.A&&!左)
{
左=真;
}
if(e.KeyCode==Keys.W)
{
向上=真;
}
if(e.KeyCode==Keys.S)
{
向下=真;
}
#端区
}
公众利益冲突()
{
对于(int x=0;x

提醒:一切正常,但我的播放器在与物体碰撞并停止几秒钟后,将继续穿过墙壁。

您需要另一个布尔值,如
cantMoveRight
,以防止播放器在撞到墙壁时向右移动,例如:

if (player.obj.Bounds.IntersectsWith(walls[x].Bounds) && right)
{
    right = false;
    cantMoveRight = true;
    cantMoveLeft = false; //Assuming when they cant move right they must move left, perhaps check this in situations when the player can only move forward or backward
}

if (player.obj.Bounds.IntersectsWith(walls[x].Bounds) && left)
{
    left = false;
    cantMoveRight = false;
    cantMoveLeft = true;
}
然后在KeyUp事件中检查:

if (e.KeyCode == Keys.D && !cantMoveRight)
{
    right = false;
}

if (e.KeyCode == Keys.A && !cantMoveLeft)
{
    left = false;
}

这样,当触发/触发
timer1\u Tick
事件时,玩家不会移动穿过墙壁。

您需要另一个布尔值,如
cantmoverright
,以防止玩家在撞到墙壁时向右移动,例如:

if (player.obj.Bounds.IntersectsWith(walls[x].Bounds) && right)
{
    right = false;
    cantMoveRight = true;
    cantMoveLeft = false; //Assuming when they cant move right they must move left, perhaps check this in situations when the player can only move forward or backward
}

if (player.obj.Bounds.IntersectsWith(walls[x].Bounds) && left)
{
    left = false;
    cantMoveRight = false;
    cantMoveLeft = true;
}
然后在KeyUp事件中检查:

if (e.KeyCode == Keys.D && !cantMoveRight)
{
    right = false;
}

if (e.KeyCode == Keys.A && !cantMoveLeft)
{
    left = false;
}

这样,当触发/触发
timer1\u Tick
事件时,玩家将不会穿过墙壁。

好的,我将在早上醒来时尝试此方法。好的,我将在早上醒来时尝试此方法。