博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SharpDX初学者教程第2部分:创建窗口
阅读量:5167 次
发布时间:2019-06-13

本文共 1759 字,大约阅读时间需要 5 分钟。

原文 

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

  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的另一个包装器)文档:://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语句而自动正确处理。在此处详细了解其工作原理::。

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

    SharpDX窗口

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

posted on
2019-05-03 01:29 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/lonelyxmas/p/10804108.html

你可能感兴趣的文章
华为面试
查看>>
平衡二叉树(AVL Tree)
查看>>
【BZOJ3295】[Cqoi2011]动态逆序对 cdq分治
查看>>
【CF799E】Aquarium decoration 线段树
查看>>
大运飞天 鲲鹏展翅
查看>>
从ECMA到W3C
查看>>
软件工程--第十六周学习进度
查看>>
yii2 ActiveRecord多表关联以及多表关联搜索的实现
查看>>
搜狗输入法安装--ubuntu
查看>>
ps/2接口键盘的输入及显示
查看>>
Swift———a Glance(极客学院)笔记
查看>>
【poj3294-不小于k个字符串中最长公共子串】后缀数组
查看>>
java如何获取其它用户登录的真是IP地址
查看>>
Jquery通过指定层次关系获取元素
查看>>
c# for 和 foreach 的区别
查看>>
docfx (一)
查看>>
HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别
查看>>
3.3-3.4.5 变量和数据类型
查看>>
Unity5.6之前版本VRTK插件基础交互
查看>>
深度学习之前馈神经网络(前向传播和误差反向传播)
查看>>