原文 http://www.johanfalk.eu/blog/sharpdx-tutorial-part-2-creating-a-window

在第二篇教程中,我们将介绍如何创建一个稍后将呈现的简单窗口。

  1. 首先,我们将创建一个名为的新类Game。右键单击项目并选择“添加 - >类...”,将文件命名为“Game.cs”。

  2. 首先,我们将类RenderForm 设为public,然后添加一个带有两个变量来保存窗口客户端大小的宽度和高度(渲染大小,不包括窗口的边框)。该RenderForm 班还需要是一个引用添加到SharpDX.Windows

    using SharpDX.Windows;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks; namespace MySharpDXGame
    {
    public class Game
    {
    private RenderForm renderForm; private const int Width = 1280;
    private const int Height = 720;
    }
    }

    RenderForm Windows.Form SharpDX提供的子类。这个类就像Windows.Form为我们提供了一个带有边框,标题栏等的窗口。但它也为我们提供了一个针对3D图形进行了优化的渲染循环。如果您想了解更多相关信息,请查看SlimDX(类似于SharpDX的另一个包装器)文档:http://slimdx.org/tutorials/BasicWindow.php 。

  3. 接下来,我们将构造函数添加到Game 创建RenderForm 的类中。我们还需要添加一个引用System.Drawing。我们还将设置标题并禁止用户调整窗口大小。

    using System.Drawing;
    
    [...]
    
    public Game()
    {
    renderForm = new RenderForm("My first SharpDX game");
    renderForm.ClientSize = new Size(Width, Height);
    renderForm.AllowUserResizing = false;
    }
  4. 下一步是向我们的Game 类添加两个方法,一个用于启动渲染/游戏循环,另一个用于调用每个帧的回调方法。这是通过以下代码完成的:

    public void Run()
    {
    RenderLoop.Run(renderForm, RenderCallback);
    } private void RenderCallback()
    { }

    我们传入我们的RenderForm 方法和每个帧调用RenderLoop.Run(…) 方法。

  5. 我们现在将为我们的Game 类添加一些清理,以确保正确放置对象。所以我们让我们的Game 类实现接口IDisposable

    public class Game : IDisposable
    {
    [...] public void Dispose()
    {
    renderForm.Dispose();
    }
    }

    在这里,我们也确保处置我们的RenderForm

  6. 作为最后一步,我们现在将从main方法运行我们的游戏。因此,打开“Program.cs”类,它在创建“控制台应用程序项目”时自动添加,并将Main(…)方法更改为以下内容:

    [STAThread]
    static void Main(string[] args)
    {
    using(Game game = new Game())
    {
    game.Run();
    }
    }

    因为Game实现IDisposable 它会因using语句而自动正确处理。在此处详细了解其工作原理:https//msdn.microsoft.com/en-us/library/yh598w02.aspx

  7. 现在,如果您运行该程序,您应该看到一个空窗口,其中包含正确的大小和标题栏文本:

这就是本教程的全部内容,在下一部分中,我们将介绍初始化Direct3D设备并设置交换链。

SharpDX初学者教程第2部分:创建窗口的更多相关文章

  1. SharpDX初学者教程第4部分:绘制三角形

    原文 http://www.johanfalk.eu/blog/sharpdx-beginners-tutorial-part-4-drawing-a-triangle 现在我们有了一个Direct3 ...

  2. SharpDX初学者教程第3部分:初始化DirectX

    原文 http://www.johanfalk.eu/blog/sharpdx-beginners-tutorial-part-3-initializing-directx 在这部分中,我们将初始化D ...

  3. SharpDX初学者教程第1部分:在Visual Studio 2013中设置SharpDX项目

    原文 http://www.johanfalk.eu/blog/sharpdx-tutorial-part-1-setting-up-a-sharpdx-project-in-visual-studi ...

  4. Unity 3D编辑器扩展介绍、教程(二) —— 创建窗口

    Unity编辑器扩展教程(二) 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 一 Brief Introd ...

  5. SharpDX初学者教程第5部分:着色三角形

    原文 http://www.johanfalk.eu/blog/sharpdx-beginners-tutorial-part-5-coloring-the-triangle 在第4部分中,我们创建了 ...

  6. NeHe OpenGL教程 第一课:OpenGL窗口

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  7. MFC程序的启动过程——先全局对象theApp(第一入口),后WinMain(真正入口),会引爆pApp->InitInstance从而创建窗口(程序员入口)

    原文出自:http://blog.csdn.net/yuvmen/article/details/5877271 了解MFC程序的启动过程,对于初学者来讲,了学习MFC很有帮助:对于不常用VC的人来说 ...

  8. 【C语言探索之旅】 第三部分第二课:SDL开发游戏之创建窗口和画布

    内容简介 1.第三部分第二课: SDL开发游戏之创建窗口和画布 2.第三部分第三课预告: SDL开发游戏之显示图像 第三部分第二课:SDL开发游戏之创建窗口和画布 在上一课中,我们对SDL这个开源库做 ...

  9. OpenGL学习(1)——创建窗口

    这是我的第一篇博客,试着记录学习OpenGL的过程.使用的教程:LearnOpenGL,系统:Deepin 15.9.3,IDE:Qt Creator. 添加头文件 创建窗口用到两个库:GLFW和GL ...

随机推荐

  1. TZ_12_Spring的RestTemplate

    1.Http客户端工具 HttpClient:HttpClient是Apache公司的产品,是Http Components下的一个组件. 特点: 基于标准.纯净的Java语言.实现了Http1.0和 ...

  2. Vue-cli3.x在开发环境中(router采用 history模式)出现Failed to resolve async component default: Error: Loading chunk {/d} failed.或者Uncaught SyntaxError: Unexpected token <错误

    使用Vue-cli3.x开发环境中(router采用 history模式)出现Failed to resolve async component default: Error: Loading chu ...

  3. 深入浅析python中的多进程、多线程、协程

    深入浅析python中的多进程.多线程.协程 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源 ...

  4. tumblr arch information

    http://developer.51cto.com/art/201305/395757.htm 每月超过30%的增长当然不可能没有挑战,其中可靠性问题尤为艰巨.每天5亿次浏览量,峰值每秒4万次请求, ...

  5. go语言:类型转换

    类型转换用于将一种类型的变量转换为另一种类型的变量. 有以下场景: package main import "fmt" func main() { var sum int = 17 ...

  6. MyBatis 动态sql标签trim

    https://blog.csdn.net/zhangxing52077/article/details/75041053 序列序号在Mybatis中的使用的使用 将获得序列值获取返回到对象code字 ...

  7. 洛谷P1084 [NOIP2012提高组Day2T3]疫情控制

    P1084 疫情控制 题目描述 H 国有 n 个城市,这 n 个城市用 n-1 条双向道路相互连通构成一棵树,1 号城市是首都,也是树中的根节点. H 国的首都爆发了一种危害性极高的传染病.当局为了控 ...

  8. phpBOM头(字符&#65279;)出现的原因以及解决方法_PHP程序员博客|高蒙个人博客

    今天在项目中发现,客户端在使用ajax得到返回值时,无法匹配字符串.总是报错,打开页面接口发现,页面的头部出现了的字符(BOM头),找到问题了,那么直接用代码清除掉即可. php隐形字符 // 如 ...

  9. bzoj 1045 [HAOI2008] 糖果传递——设变量推式子

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1045 费用流TLE. #include<iostream> #include&l ...

  10. python 匹配集合与补集