You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WinForm中两个PictureBox相交触发逻辑代码不生效如何解决

问题根因
  • 碰撞检测逻辑放错了执行位置:你把Bounds.IntersectsWith相交判断写在了开始按钮点击事件BtnStart_Click里,这个事件只会在点击开始按钮的瞬间执行1次。
  • 点击开始的瞬间障碍物还没启动移动,此时两个控件基本不可能处于相交状态,这唯一一次判断自然不会触发命中逻辑。后续定时器驱动障碍物持续左移的整个过程中,没有任何代码会再次执行碰撞检查,就算两个控件实际发生重叠,程序也完全感知不到。
  • 原逻辑遗漏了碰撞后的定时器停止操作,就算检测到碰撞,障碍物也会继续移动、重复触发弹窗逻辑。
修复方法

把碰撞检测逻辑移到定时器TmrObject的Tick事件中,每次障碍物完成位移后立刻做一次相交判断即可:

  1. 清理开始按钮点击事件中多余的碰撞判断,只保留基础启动逻辑:
private void BtnStart_Click(object sender, EventArgs e)
{
    BtnStart.Visible = false;
    TmrObject.Start();
}
  1. 调整定时器Tick事件,在位移完成后追加碰撞检测:
private void TmrObject_Tick(object sender, EventArgs e)
{
    // 障碍物左移5像素
    PbObstakel1.Location = new Point(PbObstakel1.Location.X - 5, PbObstakel1.Location.Y);
    
    // 移动完成后检测是否和角色碰撞
    if (PbObstakel1.Bounds.IntersectsWith(PbPoppetje.Bounds))
    {
        TmrObject.Stop(); // 碰撞后立刻停掉定时器,避免重复触发
        MessageBox.Show("Ur dead");
    }
}

内容的提问来源于stack exchange,提问作者Rick Smits

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 00:51:18