zoukankan      html  css  js  c++  java
  • 创建你的第一个游戏Pong——疑难解答

    疑难解答

    希望本章不会有太多的难题。本章只涉及了两个主要问题:单元测试和Sprites。或许在Xbox 360上运行游戏您还有些问题,我已经在第一章的结尾处写了一些提示和技巧;如果您仍然有Xbox 360设定的问题,可以去查看。

    另一个问题大多数人都不会提出,但对于少数对异常处理,尤其是对XNA异常没经验的人来说却会提出,那就是要理解为什么会抛出异常,并且要如何正确解决它。要随时紧盯着异常,试着回顾完整的堆栈跟踪,查看是否有带有详细描述信息的内部异常。

    就像Managed DirectX,有时您会得到来自底层DirectX Framework的异常,有时候它会令人困惑。试着到Internet和MSDN查找对应错误代码的帮助信息。在这些情况下,上下文背景通常要比错误信息本身更重要。比如,在编译一个Shader失败之后,您可能会得到奇怪的错误编码,此时应该确定Shader文件是否存在,是否能够被正确编译,您的硬件能否处理它,而不是试图查明这些错误编码什么意思。有一个用来检查Shader文件是否有效的好工具,它就是来自于Nvidia的FX Composer。

    如果您在使用单元测试的时候陷入麻烦,也请阅读下一章的“疑难解答”部分,因为它也讨论了很多单元测试。几乎始终要记住,此处您使用的单元测试和标准程序没有什么区别;同种方式对待它们。要像对待最终的应用程序一样对它们进行Debug 并一步步地跟踪。

    最后,是一些在XNA中使用Sprites的提示:

    • 如果您在其他精灵的上面渲染很多Sprites,会出现很多XNA按随机排序显示的后果,以及使用不同Texture时的问题,而且背景Sprite有时会掩盖被该在它前面的一切。就像您在XNA Pong游戏中看到的,通过额外的SpriteBatch方法调用来渲染背景。这样它就被独立出来,不会干扰游戏或者菜单中的其他Sprite。

    • 试着一次性渲染所有的Sprite,尤其是当您可以使用混合模式对它们进行排序的时候。如果你高效调用一次SpriteBatch,渲染所有的Sprite会使速度快很多。查看作为范例的DrawSprites方法。如果您使用不同的混合模式,比如附加光源效果,并且其他所有的Sprite使用Alpha混合,试图分两个过程来渲染,先渲染Alpha混合物体,然后在顶部添加光源。这样做您的游戏效能会提升200%-300%。

    • 要考虑分辨率问题,以及如何处理不同的宽度和高度;您可以在Initialize方法中借助下面两行代码来获取当前使用的分辨率:

      width = graphics.GraphicsDevice.Viewport.Width;
      height = graphics.GraphicsDevice.Viewport.Height;
    • 不能强制使用某个特定的分辨率;因为在Xbox 360上它可能根本不工作,在Windows平台上也只能使用一个建议分辨率。例如,您想在PC上测试720p 16:9(1024×768)分辨率,您必须要有一台支持这个分辨率的显示器,可以是窗口模式(windowed mode)或者支持测试的全屏模式(fullscreen mode)。在游戏主类(在本章中是PongGame类)的构造器中添加下面两行代码,把分辨率预设为720p。通过检查先前描述的宽度和高度,你能判断。你可以通过中使用先前方式获取的宽度和高度,来检查Initialize方法是否正确工作。

      graphics.PreferredBackBufferWidth = 1280;
      graphics.PreferredBackBufferHeight = 720;
    • 在XNA中不支持字体——要显示文本,您既可以像本游戏那样建立已经包含文本的纹理,也可以像第五章那样编写自己的字体支持。对于这两种解决方案您都要在屏幕上使用Sprite来渲染文本或者每次渲染一个字母。

    • 在XNA中Sprite并不是唯一显示2D数据的方式;您可以编写自己的Shader,甚至可以实现比Sprite类更多的高级特效。作为一个例子,可以查看第五章,看到如何借助Shaders渲染2D线条。

  • 相关阅读:
    poj 2411 Mondriaan's Dream 骨牌铺放 状压dp
    zoj 3471 Most Powerful (有向图)最大生成树 状压dp
    poj 2280 Islands and Bridges 哈密尔顿路 状压dp
    hdu 3001 Travelling 经过所有点(最多两次)的最短路径 三进制状压dp
    poj 3311 Hie with the Pie 经过所有点(可重)的最短路径 floyd + 状压dp
    poj 1185 炮兵阵地 状压dp
    poj 3254 Corn Fields 状压dp入门
    loj 6278 6279 数列分块入门 2 3
    VIM记事——大小写转换
    DKIM支持样本上传做检测的网站
  • 原文地址:https://www.cnblogs.com/AlexCheng/p/2120274.html
Copyright © 2011-2022 走看看