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

love.graphics.polygon坐标含义及底部对称矩形绘制问题

解决Love2D中love.graphics.polygon坐标困惑并绘制目标底部矩形

我来帮你理清楚love.graphics.polygon的坐标逻辑,以及如何实现你想要的底部对称矩形。

首先,关于坐标的含义:

  • love.graphics.polygon接收的坐标是按顺序排列的(x,y)顶点对,每两个数字组成一个顶点的坐标。比如你注释里的-11650 950 13350 950 13350 1000 -11650 1000,对应的四个顶点是:
    1. (-11650, 950)
    2. (13350, 950)
    3. (13350, 1000)
    4. (-11650, 1000)
  • 这个矩形的宽度达到了25000,远大于你1700的屏幕宽度,所以只会显示屏幕范围内的一小段,自然看起来异常。

接下来,实现你要的宽1700、高50的屏幕底部对称绿色矩形:
你的屏幕尺寸是1700×1000,底部的y坐标是1000,矩形高度50,所以顶部y坐标是1000-50=950。要对称的话,左右x坐标就是0和1700。对应的四个顶点顺序可以是:(0, 950) → (1700, 950) → (1700, 1000) → (0, 1000)

不过因为你是用Box2D的物理体来绘制,更推荐用newRectangleShape直接创建矩形,比手动写多边形点更可靠:

调整初始化ground的代码

-- 假设world已经初始化完成
objects.ground = {}
-- 把物理体的中心放在屏幕底部中间:x=1700/2,y=1000 - 25(矩形高度的一半,确保底部贴紧屏幕底部)
objects.ground.body = love.physics.newBody(world, 1700/2, 1000 - 25, "static")
-- 创建宽1700、高50的矩形形状
objects.ground.shape = love.physics.newRectangleShape(1700, 50)
objects.ground.fixture = love.physics.newFixture(objects.ground.body, objects.ground.shape)

你的draw函数可以保持不变

因为getWorldPoints会自动从Box2D的shape中获取正确的四个顶点坐标,绘制出来就是你想要的底部对称矩形了。

如果一定要手动写多边形点(非Box2D场景下),draw函数里的代码可以改成:

love.graphics.polygon("fill", 0, 950, 1700, 950, 1700, 1000, 0, 1000)

这样就能在屏幕底部画出完美的绿色矩形啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:56:27