(C#单组)将对象添加到列表中时,键盘输入滞后帧



基本上,我使用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。)方法中使用了什么。但是我认为您可以摆脱说明的说法更好。并尝试恢复玩家走路的方式。

,如果我可以看到播放器的方式,也许我可能会提供一些提示。

最新更新