在两个点之间移动精灵[连续来回移动]

本文关键字:移动 精灵 连续 之间 两个 | 更新日期: 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;

然后在绘制方法中根据位置绘制精灵(你可以从绘制一个矩形开始),你可以查看如何轻松完成。

如果你没有得到代码,我可以进一步帮助你。