我是XNA | C#的新手,我想做的只是在两点之间移动一个精灵,让它连续来回移动。
假设我希望精灵在y坐标100和0之间移动。
我将如何做到这一点?
答案 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;
然后在绘制方法中,只需根据位置绘制精灵(您可以从绘制矩形开始),您可以轻松查找如何操作。
如果你没有得到代码,我可以进一步帮助你。