在游戏LibGDX中旋转对象

时间:2012-10-17 17:27:51

标签: android rotation libgdx 2d-games

我正在使用LibGDX为Android开发游戏。我必须在游戏中需要旋转的对象。物体是板子和管子。我遇到的问题是,管件由三件,中心件和端件组成。管和板可以拉伸。因为它们可以被拉伸,所以最终的部件必须是单独的图形,以便它们不会因拉伸而变形。我很难搞清楚如何正确地做到这一点。从Box2D主体检索位置和旋转。

这是对象在构建后的样子:

tube piece with end caps http://weaverhastings.com/tube.png

这是结束:

end cap for the tube http://weaverhastings.com/tube_endpiece.png

这是中间的一块:

middle piece for the tube http://weaverhastings.com/tube_middle.png

从它看起来,看起来问题就是起源。当物体伸展时,末端件旋转的原点需要改变。但我无法弄清楚如何正确计算这个来源。

以下是我现在使用的代码:

// Right border
batch.draw(border,                     // AtlasRegion for the border
           position.x,                 // The position as reported from box2d body
           position.y,                 
           25 + 150 * scale.x,         //  25 is 2 x the end piece width, 150 is the width of the middle piece, it is multiplied by the scale because it can be stretched.
           height/2,                   // This is just the height of the tube piece
           border.getRegionWidth(),    // the is the width of the border
           height,                     
           0.6f,                       // The scale of the borders is fixed
           0.8f,                                    
           rotation * MathUtils.radiansToDegrees); // the rotation as retrieved from box2d body

// Left border  
batch.draw(border,
           position.x,
           position.y,
           25 - 150 * scale.x,
           height/2,
           border.getRegionWidth(),
           height,
           0.6f,
           0.8f,
           rotation * MathUtils.radiansToDegrees);

可以看到在这里旋转的管件的视频:http://youtu.be/RusL4Mnitds

非常感谢任何帮助。感谢您阅读此内容。

1 个答案:

答案 0 :(得分:3)

在Libgdx中,旋转原点是相对于物体位置的,例如,你告诉它被绘制的地方。

因此,对于左边框,您需要说originX将是中心部分(middlePiece.width/2)的宽度的一半或者其他正确的部分,而originX需要为负值(-middlePiece.width/2) 。当然,当不旋转时,它们的位置当然需要位于中心件的末端。每个的OriginY都是中心部分高​​度的一半。 (middlePiece.height/2)

希望这有帮助