问题描述
|
好吧,这是我的问题。
我一直在尝试在XNA中创建一种可视的昼/夜循环,其中有一个基础类更新和保存时间,还有一个Sky类,该类根据类更新的时间输出背景。
我无法弄清楚的是如何根据一天中的什么时间使月亮/太阳以向上弯曲的弧形移动,该弧形跨越屏幕。最具问题的部分是随着时间的流逝,使Y轴弯曲而X轴移动。
有人可以帮助我吗?
编辑:
好吧,看起来像Andrew Russels的例子可以帮助我完成我需要做的事情。
尽管我需要一定的经验,但最终还是找到了合适的解决方案:
浮动时间=(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;
解决方法
尝试查看
Math.Sin
或Math.Cos
函数。这些是您要寻找的三角函数。
这样的事情(给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));
(免责声明:我尚未测试此代码。)
, 还有Curve类。