将精灵按比例排列并围绕任意点旋转
|
我有2个精灵,当一起绘制时,它们可以构成屏幕上的正确图像。不能同时绘制它们。
想象一下这堂课:
class MyImage
{
Vector2 drawOffset; // this gets added before the image is drawn
Vector2 sourceRect; // this is where it is on the source texturepage
void Draw(Vector2 position)
{
position = position + drawOffset;
spriteBatch.Draw(sourceTexture, position, sourceRect, Color.White);
}
}
并向其中调用以下代码:
MyImage a = new MyImage(); // assume they get initialised correctly
MyImage b = new MyImage(); // with different drawOffsets and sourceRects
a.Draw(position); // this composes the final
b.Draw(position); // screen image from the 2 source images
现在,我想向Draw()函数添加比例和旋转,但是在正确设置SpriteBatch.Draw函数的参数方面确实遇到了麻烦。这将是需要缩放,旋转和原点的版本。我需要最终合成的图像正确缩放和旋转(围绕某个任意中心),但是我一生无法解决如何操纵缩放比例,旋转和原点参数以使2张图像看起来像是缩放和旋转音乐会。有人做过这样的事吗?如果有任何不清楚的地方,很乐意根据反馈修改问题。如果图像有帮助,我可以将其张贴在某处...
我已经看过围绕xna 2D的旋转,但是仍然很困惑。
干杯,
查理
非常感谢您提供以下答案-使用它,我设法使图像正确呈现。另一个问题仍然存在,那就是我似乎需要使用大量的spritebatch.Begin / End对(每个图像渲染一对)。我还没有办法测量此设备上的性能,并且帧速率没有变化,所以我想这不是问题。
这是我的代码:
// gr is the graphic object:
// gr.position is the location of the image in the atlas
// gr.DrawOffset is the draw offset so the image is placed correctly in it\'s virtual box
// gr.pageIndex is the index into the texture/atlas array
// hw,hh are half the width/height of the image (it always rotates around it\'s centre in fact)
Matrix m = Matrix.CreateTranslation(-hw, -hh, 0) *
Matrix.CreateRotationZ(rotation) * // rotation : parameter
Matrix.CreateScale(scale) * // scale : parameter
Matrix.CreateTranslation(pos.X + hw, pos.Y + hh, 0); // pos : parameter!
spriteBatch.Begin(SpriteSortMode.Deferred, null, null, null, null, null, m);
spriteBatch.Draw(page[gr.pageIndex].texture, gr.DrawOffset, gr.position, color);
spriteBatch.End();
没有找到相关结果
已邀请:
1 个回复
款去芳尾脊