zoukankan      html  css  js  c++  java
  • 游戏组件——Game类

    Game类

    你已经在前几章使用了Game类,不过除了通过调用来自于Program类的Run方法启动游戏和单元测试、使用Initialize、Update、Draw方法之外,那些章节没有谈论基础设计。好的,如果你只是创建一些简单的游戏,你确实不需要知道其他的一切,但是当游戏越来越大,有更多特性的时候,你可能想要考虑类的概观,以及游戏中类的设计。

    Game 自身通常持有GraphicsDeviceManager实例中的graphics device和content 字段中的 content manager。你仅仅必须从Program 类创建一个你的游戏类实例,并且调用Run方法来让一切被启动。不同于Managed DirectX或者OpenGL伴随的旧岁月,你不是必需管理自己的窗口、创建自己的游戏循环、处理Window消息等等。XNA为你做了所有的,因为以这样一种方式处理,你的游戏甚至可能运行在没有窗体类或者Windows事件可用的Xbox 360平台。

    通过游戏类的Window 属性访问游戏的窗口还是可能的。这常常用来设置窗体的标题,改变窗体尺寸(如果用户被允许),调用interop进行windows 底层处理等等。所有这些方法在Xbox 360平台什么也不做。没有窗体、没有窗体标题、当然也不能改变窗体尺寸。正如你在上一个游戏中看到的,你使用Window.Title 属性给标题栏设置一些简单的文本,为用户显示当前level和分数。你这么做的原因是在XNA中没有字体支持;要在屏幕上渲染文本,你不得不自己创建位图字型,然后渲染每一个字母。在下个游戏中,甚至对于俄罗斯方块游戏,你将需要这个特性,所以TextureFont类要花几分钟介绍。

    另外值得一提的是,像下例中通过设置图像属性那样,在游戏类的构造器中设置最佳分辨率是可行的,该例中俄罗斯方块使用了全屏模式的1024*768分辨率。

    graphics.PreferredBackBufferWidth = 1024;
    graphics.PreferredBackBufferHeight = 768;
    graphics.IsFullScreen = true;

    不保证游戏将来实际运行在这个模式;例如,在一个只支持1024*768的系统设置了1600*1200,将只使用最大可支持分辨率。

    你已经知道了Update和Draw方法被每一帧调用,不过没有游戏类自身的重载,如何合并这些新的游戏组件呢?是看一看俄罗斯方块克隆游戏的game类和组件概观的时候了(见图4-1)。

    1
    图 4-1

    你要注意的第一件事就是现在你有3个game类,而不像在上一个游戏范例中仅仅只有一个。那样做的原因是使得主游戏类简洁。BaseGame 类持有带有 graphics device的graphics manager、content manager,并且它保存了你在游戏中使用的当前分辨率的宽度、高度值。Update和Draw 方法也处理了新的Input、Sound和TextureFont类以避免在主游戏类中更新它们。然后TetrisGame 类用来加载所有来自于内容管道的图像,并且初始化所有精灵和游戏组件,稍后我们会学习到。

    最后,TestGame类继承于TetrisGame类以便于访问所有的纹理、sprite、游戏组件,并且只使用debug模式启动单元测试。TestGame类的功能和上几章的非常相似,不过这一次它被以一种好的方式组织,并且从你的主游戏类中分离出了。TetrisGame类使用几个单元测试来确保游戏的每一个部分如你计划的工作。

  • 相关阅读:
    EasyHook库系列使用教程之四钩子的启动与停止
    inputclean插件的使用方法
    机器学习(十三)——机器学习中的矩阵方法(3)病态矩阵、协同过滤的ALS算法(1)
    <LeetCode OJ> 204. Count Primes
    leetcode 235: Lowest Common Ancestor of a Binary Search Tree
    数据结构经常使用算法
    调侃物联网开源框架,我们什么时候也来开源一个?
    字符编码简单介绍
    PriorityQueue ,ArrayList , 数组排序
    从struts2.1开始Convention零配置
  • 原文地址:https://www.cnblogs.com/AlexCheng/p/2120258.html
Copyright © 2011-2022 走看看