gpt4 book ai didi

c# - MonoGame/XNA 旋转图像

转载 作者:行者123 更新时间:2023-12-01 18:55:20 24 4
gpt4 key购买 nike

这段代码是画塔的。正方形位置是正方形的左上角。 TILE_SIZE 只是正方形的尺寸。

SpriteBatch.Draw(TowerImage, new Rectangle(square.X * TILE_SIZE, square.Y * TILE_SIZE, TILE_SIZE, TILE_SIZE), null, Color.White, myTower.Rotation, 
new Vector2(TILE_SIZE - 35, TILE_SIZE - 35), SpriteEffects.None, (float)0.0);

这段代码是我确定旋转的方式

public void FaceTarget(Vector2 center, Vector2 enemyCenter)
{
Vector2 direction = center - enemyCenter;
direction.Normalize();

this.Rotation = (float)Math.Atan2(-direction.X, direction.Y);
}

我这样做是基于:

http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series2D/Rotation.php

http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series2D/Direction_to_Angle.php

旋转真的很奇怪,正常情况下是这样的:

http://puu.sh/bkd0E.png

但是当它旋转时,它会像这样:

http://puu.sh/bkd6K.png

最后当它向下看时,它完全偏离了路径,它没有绕中心旋转,但整个图像在移动,为什么会这样做?

/image/4PuiZ.jpg

只有第一张图片实际上是位于正确位置的塔

看起来好像是左上角的点旋转,我不知道为什么。有人可以帮忙吗?

最佳答案

显然,您的 Sprite 将 Vector2.Zero (或 Vector2(0,0))点视为旋转原点。这意味着 Texture2D 文件的左上角点。

我看到您将 Draw 方法中的原点设置为 TILE_SIZE - 35,这让我想知道,图 block 是宽/高 70 像素的正方形吗?

如果将减法替换为 new Vector2(TowerImage.Width/2, TowerImage.Height/2) 会发生什么?

我会给你一个来自 this site 的例子这很容易解释如何始终跟随鼠标位置旋转图像:

更新方法:

MouseState mouse = Mouse.GetState();
mousePosition = new Vector2(mouse.X, mouse.Y);

Vector2 direction = mousePosition - position;
direction.Normalize();

rotation = (float)Math.Atan2(
(double)direction.Y,
(double)direction.X);

绘制方法:

spriteBatch.Begin();

spriteBatch.Draw(
rocket,
position,
null,
Color.White,
rotation,
new Vector2(
rocket.Width / 2,
rocket.Height / 2),
1.0f,
SpriteEffects.None,
1.0f);

spriteBatch.End();

检查发布的代码中旋转角度的计算方式与您的略有不同,但重要的代码是 Draw 方法中原点的计算。

关于c# - MonoGame/XNA 旋转图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25655043/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com