love2d身体轮廓矩形

时间:2018-12-05 19:07:05

标签: lua 2d-games love2d

所以我有一个问题。如何绘制这些矩形,中间有一个缝隙,

enter image description here

我想做的是在其上使用边框,以便对象可以在内部移动并与内部边缘碰撞。

我尝试使用多边形,但是当我给出这些顶点时:

points = {4, 4, 80, 4, 80, 80, 4, 80, 4, 4, 6, 6, 78, 6, 78, 78, 6, 78, 6, 6}
love.graphics.polygon("fill", points)

它在内部填充了一个正方形,但是我想要一个空隙,并且希望碰撞盒仅覆盖红色的一面。我该怎么办?

1 个答案:

答案 0 :(得分:0)

我要做的是使用以“ line”作为参数1的多边形而不是“ fill”,使用4个坐标,并将线的宽度设置为2

points = {5, 5, 79, 5, 79, 79, 5, 79}
love.graphics.setLineWidth(2)
love.graphics.polygon("line", points)

这将绘制您想要的形状。

根据您的理解,您对要编码的内容的描述听起来很像this tutorial on using love.physics.,物理上不允许绘制空心形状。因此,如果您想获得物体从墙壁弹起的最终结果,我将按照本教程的说明进行操作,并添加3个与墙壁和屋顶的地面物体相似的物体

  --Wall left
  objects.wall1 = {}
  objects.wall1.body = love.physics.newBody(world, 25, 650/2) 
  objects.wall1.shape = love.physics.newRectangleShape(50, 650) 
  objects.wall1.fixture = love.physics.newFixture(objects.wall1.body, objects.wall1.shape) 

  --Wall Right
  objects.wall2 = {}
  objects.wall2.body = love.physics.newBody(world, 625, 650/2) 
  objects.wall2.shape = love.physics.newRectangleShape(50, 650) 
  objects.wall2.fixture = love.physics.newFixture(objects.wall2.body, objects.wall2.shape)

  --Roof
  objects.roof = {}
  objects.roof.body = love.physics.newBody(world, 650/2, 25) 
  objects.roof.shape = love.physics.newRectangleShape(650, 50) 
  objects.roof.fixture = love.physics.newFixture(objects.roof.body, objects.roof.shape)

以及将绘图部分添加到love.draw()

love.graphics.setColor(0.76, 0.18, 0.05)
love.graphics.polygon("fill", objects.wall1.body:getWorldPoints(objects.wall1.shape:getPoints())) 
love.graphics.polygon("fill", objects.wall2.body:getWorldPoints(objects.wall2.shape:getPoints()))
love.graphics.polygon("fill", objects.roof.body:getWorldPoints(objects.roof.shape:getPoints()))