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

时间:2014-07-02 23:08:47

标签: c# xna

我是XNA | C#的新手,我想做的只是在两点之间移动一个精灵,让它连续来回移动。

假设我希望精灵在y坐标100和0之间移动。

我将如何做到这一点?

2 个答案:

答案 0 :(得分: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;
   }
}

答案 1 :(得分:0)

以下是XNA的工作原理,它调用方法的每一帧都会更新并在游戏主页中绘制。我们需要跟踪你的精灵移动的方向及其位置,以便我们添加到你的主游戏文件中:

public Vector2 rectanglePosition = new Vector2(0,0);
public bool moveRight = true;

现在你要做的是每一帧更新位置,并用它来绘制一个对象。所以在更新方法中你会有像

这样的东西
if (moveRight)  
rectanglePosition.Y += 10;  
else  
rectanglePosition.Y -= 10; 

if(rectanglePosition.Y>100 || rectanglePosition.Y<0) 
moveRight = !moveright;

然后在绘制方法中,只需根据位置绘制精灵(您可以从绘制矩形开始),您可以轻松查找如何操作。

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