• XNA 3.0初步——自定义游戏循环时间


    1.6 自定义游戏循环时间

    问题

    你想改变调用Update和Draw方法的默认时间间隔。

    解决方案

    Update 方法默认是每秒钟更新60次,而Draw方法则没有限制,但最大为屏幕刷新率。通过改变Game类的TargetElapsedTime和IsFixedTimeStep静态属性和GraphicsDevice类的SynchronizeWithVerticalRetrace的属性,你就可以改变默认的行为。

    工作原理
    改变Update频率

    默认情况下Update每秒更新60次,或者说每隔16.667毫秒更新一次。你可以通过改变TargetElapsedTime变量改变更新频率: this.TargetElapsedTime = TimeSpan.FromSeconds(1.0f / 100.0f); 当调用到这行代码时,XNA会以每秒100次的频率调用Update方法。你也可以让XNA不按固定时间间隔调用Update方法,要做到这点,需要将Is FixedTimeStep变量设置为false:

    this.IsFixedTimeStep = false;
    使用IsRunningSlowly

    你可以指定Update的更新频率,但如果频率太高,XNA将无法达到,在这种情况下,gameTime. IsRunningSlowly 变量会被设置为true:

    Window.Title = gameTime.IsRunningSlowly.ToString();

    注意:你应该将gameTime参数传递到Update方法而不是Draw方法去判断gameTime. IsRunningSlowly。

    改变Draw频率

    当运行程序时,XNA会以尽可能大的频率调用Draw方法,只由下面两个规则限制:

    • 没有必要将调用Draw的频率大于屏幕刷新频率。如果屏幕刷新频率只有每秒100次,每秒绘制110次是无用的。在PC和Xbox360平台上,,屏幕刷新率是由PC屏幕和它的设置决定的,Zune 30每秒刷新60次,其他Zune设备每秒刷新30次。
    • Update方法每秒调用60次。如果游戏计算量太大,Draw方法调用次数会变少以保证Update方法可以每秒调用60次。

    在某些情况中,以最大频率调用Draw方法是有用的,例如当决定你的游戏的最大帧频率时,你可以将graphics.SynchronizeWithVerticalRetrace变量设置为true:

    graphics.SynchronizeWithVerticalRetrace = false;

    注意:你必须在Game1的构造函数顶部加入这行代码,因为XNA需要在创建GraphicsDevice 之前知道这个设置。

    理解Update和Draw方法调用频率的重要性

    因为你将更新逻辑放置在Update方法中,Update频率的减少会导致游戏中的所有物体变慢,这非常令人讨厌。

    当Draw调用频率小于屏幕刷新频率时,只有游戏的视觉表现会暂时受影响,游戏帧频率暂时由每秒100帧降到80帧不容易察觉。

    因此,如前所述,如果必要,XNA会降低Draw的频率以保证Update能以每秒60帧的频率调用。

  • 相关阅读:
    生产力-能力-生产工具
    window.location.Reload()和window.location.href 区别
    getAttribute() 与 attr() 的区别
    清空标签间的内容(innerHTML)和 value
    使用 data-* 属性来嵌入自定义数据:
    JS-jquery 获取当前点击的对象
    Redis深度历险——核心原理与应用实践
    PhpStorm 配置 Xdebug调试工具
    phpCOW机制详解
    rel=nofollow 是什么意思
  • 原文地址:https://www.cnblogs.com/AlexCheng/p/2120201.html
Copyright © 2020-2023  润新知