我的目标是在按下按钮时,使精灵在时间上进行缩放并恢复原状,以便在游戏的“俯视”视图中给人一种跳跃的错觉。就像角色从屏幕上跳下来一样。我已经知道如何绘制缩放的图像,我更感兴趣的是时间方面的逻辑。
这个代码可以工作,只是不确定它是否最好。想到也许有一些等式,一个数学朋友告诉我可能是线性方程或者像抛物线或二阶方程之类的东西。但我不太擅长数学。
无论如何。
类属性
private double _jumpingStartedAt;
private double _totalJumpTimeInSeconds = 0.7;
private double _totalJumpFrames = 14;
private double _timeSinceLastScale;
private double _jumpingHalfWayAt;
当按钮第一次被按下时,我会启动“跳跃逻辑”。这将在每次跳跃时运行一次。我的想法是标记“开始”时间,并通过totalJumpTimeInSeconds
确定“中途”时间。
_jumpingStartedAt = gameTime.TotalGameTime.TotalSeconds;
_jumpingHalfWayAt = _jumpingStartedAt + MillisecondsBetweenFrame() * (_totalJumpFrames / 2);
然后这个操作会在每个Update()
上运行,直到我的“跳跃”完成或者isJumping = false
。这里的逻辑是我会在每一帧都放大直到一半的位置,然后再缩小。
_timeSinceLastScale += gameTime.ElapsedGameTime.TotalSeconds;
if (_timeSinceLastScale > MillisecondsBetweenFrame() && gameTime.TotalGameTime.TotalSeconds < _jumpingHalfWayAt)
{
Scale += 0.2f;
_timeSinceLastScale = 0;
}
else if (gameTime.TotalGameTime.TotalSeconds > _jumpingHalfWayAt)
{
Scale -= 0.2f;
if (Scale < 1.0) Scale = 1; //probably don't need this was worried if it went passed 0
if (Scale == 1.0) _isJumping = false;
}
private double SecondsBetweenFrame()
{
return _totalJumpTimeInSeconds / this._totalJumpFrames;
}
现在这个方法可以用,但对我来说似乎有些复杂。