C# 标签有时会粘在其他标签上。Winforms基本游戏,包含移动和合并

C# 标签有时会粘在其他标签上。Winforms基本游戏,包含移动和合并,c#,winforms,label,C#,Winforms,Label,我已经创造了一个游戏,我发现大部分已经完成。唯一的问题是,有时当你走向一堵同样是标签的墙时,你会被卡住。 相信我,当我说这将是一个超级困难的我来解释,我相信你更难解决 好的,我会先介绍一些基本信息,我想这会有所帮助 这是一个迷宫游戏,玩家用箭头键移动,用布尔来确定前进方向。 墙也是标签,并从中获取冲突 private List<Label> GetLabels(Control control) { foreach (var childControl

我已经创造了一个游戏,我发现大部分已经完成。唯一的问题是,有时当你走向一堵同样是标签的墙时,你会被卡住。 相信我,当我说这将是一个超级困难的我来解释,我相信你更难解决

好的,我会先介绍一些基本信息,我想这会有所帮助

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

    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;
    }
要补充的是,我是球员的速度

所以人们。有什么问题吗?如果您需要更多的代码或数据,请询问我,我将全神贯注地监测这一点

编辑:

这是我检查结肠炎的方法

    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

这不是我在冲突时向bumb添加“i”时所做的吗?可能吧,尽管我还没有看到您实际的碰撞检查。不过,从经验来看,将对象移动到墙中,然后再将其移回墙外,会引起碰撞异常,例如它卡在墙中。如果您仅使用IntersectsWith,如何设置左右布尔值?是的。有关于如何修复的线索吗?我明白你所说的在colision请求truble后如何移植回来,但我不知道如何修复它。我会创建一个自定义边界碰撞函数,而不是内置的IntersectsWith函数,将速度合并到该函数中,并在碰撞为真时防止移动。对于未来的项目,如果您使用的是WinForms,我建议您至少使用GDI+@谢谢你的补充,我可能会问我的老师,他是否能为我们解释一些基本的GDI。
//Velocity included
if(player.Left - i <= wall.Right)

//Velocity unaccounted for
if(player.Left <= wall.Right