物体通过关节定位

时间:2014-09-03 11:15:23

标签: lua corona

我不知道如何在标题中最好地描述这个问题,但我会给你看图片以说明我的意思。

This is the problem I am having

This is what I'm trying to do

(1)图1显示了我遇到的问题

(2)图2显示了我想要实现的目标。

- 问题 - 正如你所看到的那样,我试图使3个块对齐除了尖峰,然后挤出。当我在日冕中设置它时,它基本上使图像按高度对齐。

这是我的spawn函数:

function createBlock(event)
  b = display.newImageRect("images/Spike.png", 37,80)
  b.x = display.contentWidth + 100
  b.y = math.random(2) == 1 and display.contentCenterY -75 or display.contentCenterY +40
  b.rotation = math.random(2) == 1 and 0 or 180
  b.name = 'block'
  physics.addBody( b, "static", physicsData:get("Spike"))
  blocks:insert(b)
end

编辑:

function check( event )
   if b.rotation == 180 then
   b.y = math.random(2) == 1 and display.contentCenterY - 80 or display.contentCenterY + 30
   end
 end

1 个答案:

答案 0 :(得分:0)

如果物体的高度为H并且尖峰的高度为S(因此3个块的高度为H-S),并且您将它们当前定位在Y处,Y向屏幕底部增加,并且对象的原点位于最底部块(相对尖峰)的底部,它们的默认方向是尖峰,然后:

  • 定位在Y + H处有尖峰的块;它们的尖峰将位于Y处,而尖峰的底部位于Y + S处。
  • 定位在Y + S处有尖峰的块,然后旋转180度。块的最顶部边缘将是Y + S,这是您想要的。

如果第一段中的任何条件不同,您将不得不进行相应的调整,但希望这表明如何弄清楚。

更新:

可能更好的方法是移动锚点,使其位于中间正方形的中心。默认情况下,锚点为0.5,因此将其置于第2和第3个正方形之间(假设距离峰值最远的正方形是“第一个正方形”)。由于你的Block由4个单元格(3个正方形和一个尖峰)组成,你可以这样做:

function createBlock(event)
  local H = 80
  local b = display.newImageRect("images/Spike.png", 37, H)
  b.x = display.contentWidth + 100 -- NOTE: weird, doesn't this put the obj off screen? 
  local cellH = H/4 -- assume all four cells in a Block have this height
  b.anchorY = 0.5 - 0.25/2 -- each cell is 0.25 of height, need half that, away from spike
  b.rotation = math.random(2) == 1 and 0 or 180 -- will rotate around the new anchorY
  local posY = display.contentCenterY - 75
  b.y = math.random(2) == 1 and posY or posY + 115
  b.name = 'block'
  physics.addBody( b, "static", physicsData:get("Spike"))
  blocks:insert(b)
end

请注意,b.anchorY可能必须为b.anchorY = 0.5 + 0.25/2,具体取决于您创建图片的方式,但它应为+或 - 1/8。