标签有时会粘在其他标签上.用移动和碰撞形成基本游戏

本文关键字:标签 碰撞 游戏 移动 其他 | 更新日期: 2023-09-27 17:58:51

我创建了一个游戏,我发现它基本上已经完成了。唯一的问题是,有时当你走向一堵同样是标签的墙时,你会被卡住。相信我,当我这么说的时候,这将是我难以解释的,我相信你更难解决。

好的,所以我会先提供一些基本信息,我认为这会有所帮助。

这是一个迷宫游戏,玩家用箭头键移动,用bools来确定前进的方向。墙也是标签,并从这个中获得冲突

    private List<Label> GetLabels(Control control)
    {
        foreach (var childControl in control.Controls)
        {
            if (childControl is Label && ((Label)childControl).Name != "player")
            {
                Labels.Add((Label)childControl);
            }
            else
            {
                GetLabels((Control)childControl);
            }
        }
        return Labels;
    }

当timer1被启用并且通过keyDown操作左右向上或向下为true时,移动发生。我已经做到了,当你与墙共线时,你会在与墙相反的方向上移植1个像素,当你用这个代码撞墙时

            if (Right)
            {
                Right = false;
                player.Left -= 2 + i;
                timer1.Enabled = false;
            }
            else if (Left)
            {
                Left = false;
                player.Left += 2 + i;
                timer1.Enabled = false;
            }

要补充的是,我是球员的速度。

人们也是如此。可能是什么问题?如果你需要更多的代码或数据,请问我,我会全力监控。

编辑:

这就是我检查colsion 的方式

    foreach (var label in Labels.Where( label => player.Bounds.IntersectsWith(label.Bounds)))
    private List<Label> GetLabels(Control control)
    {
        foreach (var childControl in control.Controls)
        {
            if (childControl is Label && ((Label)childControl).Name != "player")
            {
                Labels.Add((Label)childControl);
            }
            else
            {
                GetLabels((Control)childControl);
            }
        }
        return Labels;
    }

标签有时会粘在其他标签上.用移动和碰撞形成基本游戏

在检查碰撞时,我建议在包括速度的情况下进行检查。例如,如果我正在查看玩家左侧的收藏。。。

//Velocity included
if(player.Left - i <= wall.Right)
//Velocity unaccounted for
if(player.Left <= wall.Right