C# Monogame-如何自动上下移动矩形并重复?

C# Monogame-如何自动上下移动矩形并重复?,c#,textures,monogame,rectangles,C#,Textures,Monogame,Rectangles,因此,我正在处理菜单的背景,我Draw()那里有一个带有矩形的纹理。如何让矩形等待,上下移动,等待并重复?我尝试了以下方法: // Update() if (Rectangle.Y = -16) // My texture is positioned to -16 initially Rectangle.Y++; else if (Rectangle.Y = 0) Rectangle.Y--; 所以我的游戏分辨率是1366x768。要使背景纹理上下移动,我必须使其具有高度>76

因此,我正在处理菜单的背景,我
Draw()
那里有一个带有矩形的纹理。如何让矩形等待,上下移动,等待并重复?我尝试了以下方法:

// Update()
if (Rectangle.Y = -16) // My texture is positioned to -16 initially
    Rectangle.Y++;
else if (Rectangle.Y = 0)
    Rectangle.Y--;

所以我的游戏分辨率是
1366x768
。要使背景纹理上下移动,我必须使其具有
高度>768
。我做的是
1366x800
。每次调用上述代码时,它应该等待1-2秒(尚未实现),向下移动16像素,再次等待,然后向上返回16像素。。。但那个代码不起作用。。。你能告诉我这是怎么做的吗?

你可以用
Math.Sin
来做,它会让你从-1平稳过渡到1。您必须保留矩形中心Y位置的副本

double time = gameTime.TotalGameTime.TotalSeconds;
Rectangle.Y = centerY + (int)(Math.Sin(time * transitionSpeed) * maxOffset);
您可以使用
double transitionSpeed
获得最佳视觉效果
int maxOffset
是距centerY的最大偏移量


如果你不想动作流畅,那就去做吧

int speed = 1; // speed of movement
然后更新

if (Rectangle.Y <= -16 || Rectangle.Y >= 0) 
    speed *= -1; // reverse move direction
Rectangle.Y += speed;
if(矩形Y=0)
速度*=-1;//反向移动方向
矩形。Y+=速度;

一个很好的方法是使用
Math.Sin
我确实想要平滑的移动,所以我假设
centerY
是一个
矩形。高度/2
maxOffset
应该是
16
。在这两种情况下,我也会使用
gameTime.ElapsedGameTime
的倍数。@JohnyP<代码>中心Y
应为矩形的原始Y位置,且不应用任何偏移
maxOffset
是您希望矩形从中心位置移动多远哦,现在我明白了。我把一切都搞定了。我只需要玩转
transitionSpeed
就可以找到最佳效果。