我正在使用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
非常感谢任何帮助。感谢您阅读此内容。
答案 0 :(得分:3)
在Libgdx中,旋转原点是相对于物体位置的,例如,你告诉它被绘制的地方。
因此,对于左边框,您需要说originX将是中心部分(middlePiece.width/2)
的宽度的一半或者其他正确的部分,而originX需要为负值(-middlePiece.width/2)
。当然,当不旋转时,它们的位置当然需要位于中心件的末端。每个的OriginY都是中心部分高度的一半。 (middlePiece.height/2)
希望这有帮助