为什么delta时间不起作用? (MonoGame,C#)

时间:2018-06-12 07:31:47

标签: c# monogame

我正在尝试让我的游戏使用增量时间,以便它独立于FPS。我做了这件事并将它们并排比较:

https://youtu.be/XYC-AZbk0JE

但144fps的玩家仍然走得更快。我的代码:

@RunWith(AndroidJUnit4::class)
class MainActivityView {
    @get:Rule
    val activityTestRule = object : ActivityTestRule<MainActivity>(MainActivity::class.java, true, false) {
        override fun beforeActivityLaunched() {
            super.beforeActivityLaunched()
            val myApp = InstrumentationRegistry.getTargetContext().applicationContext as MyApplication
            myApp.activityDispatchingAndroidInjector = createFakeActivityInjector<MainActivity> {
                mainViewModel = mainView
                viewModelFactory = mockMPF // TODO: fix problem, null pointer in activity
            }
        }
    }

    private val mockMPF = Mockito.mock(ViewModelProvider.Factory::class.java)

    private var mainView = Mockito.mock(MainViewModel::class.java)

    private val repoLiveData = MutableLiveData<ApiResponse<Result>>()

    @Before
    fun setup() {
        Mockito.`when`(mainView.getFactsList()).thenReturn(repoLiveData)
    }

    @Test
    fun isListDisplayed() {
        repoLiveData.postValue(ApiResponse(Result("title", arrayListOf(Row("title", "des", "img"))), null))
        activityTestRule.launchActivity(null)
        onView(withId(R.id.recycler_adapter)).check(matches(isDisplayed()))
    }
}

我做错了什么?

P.S:我很肯定这不只是我的眼睛和我一起玩。我可以看到播放器在144fps上的速度比在60fps上的速度快。

1 个答案:

答案 0 :(得分:2)

这里的问题不是增量时间本身。

当您计算速度变化时,您将完美地应用增量时间。

当您实际将速度应用于播放器itselft时,问题就出现了。假设你处于最大速度(5)。由于在将速度应用到位置时没有考虑增量时间,因此您将以144fps而不是60fps更频繁地应用速度方式。这就是角色看起来更快的原因。

你可能想做类似的事情:

position += velocity * delta;

那应该解决你的问题。