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

Love2D(Lua)俄罗斯方块左墙碰撞异常:仅检测单个方块

俄罗斯方块左墙碰撞检测问题解决

我正在用Love2D(Lua)制作俄罗斯方块练手,尝试实现方块与左墙的碰撞检测。方块由多个tile组成,每个tile的相对位置存储在table中。我编写了wallLeftCollision函数实现左墙碰撞,但运行时函数仅检测单个tile而非遍历所有tile判断是否触碰到左墙。我仅会Minecraft指令,无其他编程经验,希望解决该问题。

原实现代码:

function tetros.wallLeftCollision(x)
  for i, c in pairs(tetros.shapes[v.shape].angles[v.angle].cubes) do
    local cx= c.x+x
    if cx-1 <= v.window.x then
      return true
    else
      return false
    end
  end
end

问题原因

你的函数在第一次循环时,不管当前tile是否碰墙都会直接返回结果:如果第一个tile碰墙就返回true,没碰就返回false,根本不会继续检查剩下的tile。但你需要的逻辑是只要有任意一个tile碰墙就返回true,所有tile都没碰才返回false。

修正后的代码

function tetros.wallLeftCollision(x)
  for i, c in pairs(tetros.shapes[v.shape].angles[v.angle].cubes) do
    local cx = c.x + x
    -- 发现有tile碰墙,立刻返回true
    if cx - 1 <= v.window.x then
      return true
    end
  end
  -- 所有tile都检查完,没有碰墙才返回false
  return false
end

简单解释

  • 循环会逐个检查方块的每个tile,只要找到一个碰左墙的,就马上返回true并结束函数
  • 只有当所有tile都检查过,没有一个碰墙,才会执行循环外面的return false

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 07:31:45