基本上,我使用gameTime.TotalGameTime.TotalSeconds
的敌方对象和定时事件列表。每0.1秒,它需要一种检查敌人产卵的方法,如果我们在第二个2.5,我们将敌人添加到敌人名单中。
现在,发生的事情是键盘输入滞后一秒钟,例如,如果我在左右向左移动,我的角色将在恢复移动之前停止短时间(例如我认为的0.1秒)。
我正在使用GameTime检查每个毫秒的键盘输入,但是我也尝试使用它,但它仍然发生。这也很奇怪,因为我有代码每0.5秒创建子弹对象,如果我按照敌人的方式按住z(通过将对象添加到列表中),但这并不会使它滞后输入
if (elapsedMs > oldElapsedMs + 0.001) //Millisecond update, for movement
{
oldElapsedMs = elapsedMs;
//Keys to be held down.
newState = Keyboard.GetState();
Keys[] pressed_Key = Keyboard.GetState().GetPressedKeys();
for (int i = 0; i < pressed_Key.Length; i++)
{
switch (pressed_Key[i])
{
case Keys.Escape:
this.Exit();
break;
case Keys.Left:
player.tryMoveLeft();
break;
case Keys.Right:
player.tryMoveRight();
break;
case Keys.Up:
player.tryMoveUp();
break;
case Keys.Down:
player.tryMoveDown();
break;
default:
break;
}
}
}
产生检查代码:
//0.1sec Update, spawning code
if (elapsedSpawnTime > oldElapsedSpawnTime + 0.1)
{
oldElapsedSpawnTime = elapsedSpawnTime;
spawnTimer += 1; //Every 0.1 sec add one to spawnTimer. The spawn timer int is what stage.Spawn() uses to check for spawns.
stage.Spawn();
}
我在舞台课上的产卵方法:
public void Spawn()
{
switch (game.spawnTimer) //Each int is 0.1sec
{
//10 spawnTimer = 1 Second
case 40:
case 42:
case 44:
case 46:
game.enemyList.Add(new Enemy(game.enemySprite, 500, 500, 1, true));
break;
default:
break;
}
}
谢谢。如果您想帮助我,但需要更多信息,可以添加我的Skype @ emil1000123
屏幕截图中的代码
( elapsedMs > oldElapsedMs + 0.001 )
变量名称这些值以毫秒为单位,那么您是否每0.001毫秒检查一次?
似乎问题在于毫秒更新:
if (elapsedMs > oldElapsedMs + 0.001)
那么,如果在此陈述中获得该怎么办,但是还没有通过1毫秒?
一台计算机在刻度中查看代码,这些代码比毫秒更快,因此它将完全忽略该语句,这可能会导致很小的滞后,具体取决于您的PC的性能和文件大小(这会增加添加数组或列表)
现在,我不知道您在TryMoveleft()(Ect。)方法中使用了什么。但是我认为您可以摆脱说明的说法更好。并尝试恢复玩家走路的方式。
,如果我可以看到播放器的方式,也许我可能会提供一些提示。