love.graphics.polygon坐标含义及底部对称矩形绘制问题
解决Love2D中
love.graphics.polygon坐标困惑并绘制目标底部矩形 我来帮你理清楚love.graphics.polygon的坐标逻辑,以及如何实现你想要的底部对称矩形。
首先,关于坐标的含义:
love.graphics.polygon接收的坐标是按顺序排列的(x,y)顶点对,每两个数字组成一个顶点的坐标。比如你注释里的-11650 950 13350 950 13350 1000 -11650 1000,对应的四个顶点是:- (-11650, 950)
- (13350, 950)
- (13350, 1000)
- (-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
相关产品推荐
相关产品推荐

