当我在代码下面运行时,我的预期输出是玩家应该连续动画,当用户点击屏幕时,玩家应该跳跃。我的播放器的帧不同,跳帧也不同。我在鼠标左键单击时调用帧。处理所有帧但速度过快,因此动画不可见。
private void OnUpdate(object sender, GameTimerEventArgs e)
{
float elapsed = (float)e.ElapsedTime.TotalSeconds;
timer5 -= elapsed;
TouchPanel.EnabledGestures = GestureType.Tap;
TouchCollection touches = TouchPanel.GetState();
MouseState mousestate = Mouse.GetState();
//Texture.position += velocity;
//if (rect.Contains(new Microsoft.Xna.Framework.Point(mousestate.X, mousestate.Y)) && mousestate.LeftButton == ButtonState.Pressed)
if (mousestate.LeftButton==ButtonState.Pressed)
{
for (int i = 0; i < 32; i++)
{
jump();
jumpframe++;
if (jumpframe > 24)
{
jumpframe = 0;
}
System.Diagnostics.Debug.WriteLine("currentframe:"+ jumpframe);
}
}
if (timer5 <= 0)
{
playerr();
currentframe++;
if (currentframe > 24)
{
currentframe = 0;
}
timer5 = TIME_BET_FRAME;
}
}
private void OnDraw(object sender, GameTimerEventArgs e)
{
SharedGraphicsDeviceManager.Current.GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
//level.Draw(spriteBatch);
rect2 = new Rectangle(0, 0, 960, 620);
rect = new Rectangle(0, 0, 420, 300);
spriteBatch.Draw(Texture.player[currentframe], Texture.position, Color.White);
spriteBatch.Draw(Texture.jumpplayer[jumpframe], Texture.jumpposition, Color.White);
spriteBatch.Draw(Texture.jumpbtn, Texture.rect, Color.White);
spriteBatch.DrawString(font, "Score", new Vector2(10, 0), Color.Gold);
spriteBatch.End();
}
public void jump()
{
Texture.jumpposition.X = 10;
Texture.jumpposition.Y = 243;
Texture.position.X = -400;
Texture.position.Y = 243;
}
public void playerr()
{
Texture.position.X = 10;
Texture.position.Y = 243;
Texture.jumpposition.X = -400;
Texture.jumpposition.Y = 243;
}
答案 0 :(得分:2)
我看到的是循环
for(int i=0;i<32;i++){...}
在OnUpdate
。
你能做什么呢?
bool _jump;
private void OnUpdate(object sender, GameTimerEventArgs e)
{
// ...
if (mousestate.LeftButton==ButtonState.Pressed)
{
if(!_jump)
{
// start jumping
_jump = true;
}
else
{
// jumping in progress
_jumpframe++;
// end of jumping check
if(_jumpframe > 24)
{
_jumpframe = 0;
_jump = false;
}
}
jump();
}
}
这应该以{{1}}的速度(频率)执行跳跃动画。