在两个点之间移动精灵[连续来回移动]
本文关键字:移动 精灵 连续 之间 两个 | 更新日期: 2023-09-27 18:11:17
我对XNA| c#很陌生,我想做的就是简单地在两点之间移动一个精灵,让它连续地来回移动。
假设我想让精灵在y坐标100和0之间移动。
我该如何做到这一点?
你的问题与XNA本身无关。你问的是如何在一条直线上移动一个物体,这通常是第一年学的几何知识。
我假设你画你的纹理像这样:
SpriteTexture sprite;
Vector2 position;
...
protected override void Draw(GameTime gameTime)
{
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
spriteBatch.Draw(sprite, position, Color.White);
spriteBatch.End();
base.Draw(gameTime);
}
直线是一条极其简单的路径——它很容易由两点定义。设点为P1和P2。直线定义为函数(1 - t) * P1 + t * P2
,其中0 <= t <= 1
。要移动精灵,从t = 0
开始,并在每个更新周期中增加t
。用给定的t
计算函数可以得到精灵的位置。当t >= 1
到达P2时,这意味着你应该开始将t
递减到0,以此类推。以下是如何使用这一事实来移动精灵:
SpriteTexture sprite;
Vector2 position;
Vector2 p1 = new Vector2(0, 100),
p2 = new Vector2(0, 0);
double currentTime = 0, timestep = 0.01;
...
protected override void Update(GameTime gameTime)
{
position = currentTime * p1 + (1 - currentTime) * p2;
currentTime += timestep;
if (currentTime >= 1 || currentTime <= 0)
{
timestep *= -1;
}
}
以下是XNA的工作原理,每一帧它都会在你的游戏主页中调用update和draw方法。我们需要跟踪你的精灵移动的方向和位置,所以让我们添加到你的主游戏文件:
public Vector2 rectanglePosition = new Vector2(0,0);
public bool moveRight = true;
现在你要做的是每一帧更新位置,并使用它来绘制对象。在update方法中,你可以输入
if (moveRight)
rectanglePosition.Y += 10;
else
rectanglePosition.Y -= 10;
if(rectanglePosition.Y>100 || rectanglePosition.Y<0)
moveRight = !moveright;
然后在绘制方法中根据位置绘制精灵(你可以从绘制一个矩形开始),你可以查看如何轻松完成。
如果你没有得到代码,我可以进一步帮助你。