zoukankan      html  css  js  c++  java
  • 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帧的频率调用。

  • 相关阅读:
    Python中使用PyMySQL
    python实现通用json导入到mysql
    python实现通用excel导入到mysql
    java优化几个小步骤
    日志添加request-id
    Nginx优化
    tomcat8 性能优化参考
    excel空格处理
    spring boot swagger ui使用 nginx 部署后无法使用问题
    Swagger2多包扫描
  • 原文地址:https://www.cnblogs.com/AlexCheng/p/2120201.html
Copyright © 2011-2022 走看看