基本上,我使用gameTime.TotalGameTime.TotalSeconds
列出了敌人对象和定时事件。它每0.1秒就会调用一种方法来检查敌人的产卵,如果我们在第二个2.5,我们就会向敌人的名单添加一个敌人。
现在发生的事情是键盘输入滞后一秒,例如,如果我连续向左移动,我的角色会在恢复移动之前停留一小段时间(比如0.1秒)。 / p>
我使用gameTime每毫秒检查键盘输入,但我也尝试过不使用它,但它仍然会发生。这也很奇怪,因为我有代码可以每隔0.5秒创建一个子弹对象,如果我按照与敌人相同的方式按住Z(通过将对象添加到列表中),但这并不能使它成为lagg输入
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
答案 0 :(得分:0)
屏幕截图中的代码
( elapsedMs > oldElapsedMs + 0.001 )
变量名称表示这些值以毫秒为单位,那么您是否每0.001毫秒检查一次?
答案 1 :(得分:0)
似乎问题在于毫秒更新:
if (elapsedMs > oldElapsedMs + 0.001)
那么,如果它出现在这个声明中会发生什么,但是还没有超过1毫秒呢?
计算机以滴答的形式查看代码,这些代码的速度比毫秒快,因此它根本不会忽略该语句,这会导致微小的延迟,具体取决于PC的性能和文件大小(通过添加数组或列表将增加)
现在,我不知道您在TryMoveLeft()(等)方法中使用了什么。但我认为你更好地摆脱了所说的if语句。并试着改变玩家走路的方式。
如果我能看到player.TryMoveRight方法的样子,我可能会提供一些提示。