2011-05-30 65 views
1

好的,所以这是我的问题。在XNA中向上弯曲的弧形移动2D精灵?

我一直试图在XNA中创建一种视觉日/夜周期,其中我有一个基础类更新并保存时间,并且Sky类根据类更新的时间输出背景。

但我不能弄清楚的是,如何让月球/太阳在弯曲的向上弧线上移动,该弧线基于一天中的什么时间跨越屏幕。最有问题的部分是让Y轴变为曲线,而X轴随着时间的推移而移动。

任何人都可以帮助我吗?

编辑: 好吧,看起来像安德鲁鲁塞尔的例子,帮助我做我需要做的。 虽然我不得不精力一点,但我终于找到了合适的解决方案: float Time =(float)Main.inGameTime.Seconds /(InGameTime.MaxGameHours * 60 * 60/2);

this.Position.X = Time * (Main.Viewport.X + Texture.Width * 2) - Texture.Width; 
this.Position.Y = Main.Viewport.Y - (Main.Viewport.Y * (float)Math.Sin(Time * MathHelper.Pi)/2) - (Main.Viewport.Y/2) + 50; 

回答

2

试试看Math.SinMath.Cos的功能。这些是您要查找的trigonometric functions

像这样的东西(给人一种位置SpriteBatch):

float width = GraphicsDevice.Viewport.Width; 
float height = GraphicsDevice.Viewport.Height; 
float time = 0.5f; // assuming 0 to 1 is one day 
Vector2 sunPosition = new Vector2(time * width, 
     height - height * (float)Math.Sin(time * width/MathHelper.TwoPi)); 

(声明:我没有测试此代码。)

+0

非常感谢你,不得不为我的视口和所有这些修改它,但现在它就像一个魅力。查看我的问题解答。 – SpikensbroR 2011-05-30 16:26:53

+0

如果您想包含夜间循环,则可以使用Math.Sin和Math.Cos来创建完整的圆周运动 – tweetypi 2011-06-01 01:00:21