游戏开发论坛

 找回密码
 立即注册
搜索
查看: 30812|回复: 21

游戏开发教程c# 1

[复制链接]

68

主题

710

帖子

719

积分

高级会员

Rank: 4

积分
719
QQ
发表于 2004-12-15 10:33:00 | 显示全部楼层 |阅读模式
   
C#游戏开发教程 1




本文适合有一定编程基础的爱好者!本文不会涉及基本的语法等内容,本文

适合所有游戏开发初学者,本文从Microsoft DirectX 9.0 SDK (Summer 2004)中

的D3D下Tutorials文件夹下的例子开始!!
    关键字:c#  游戏开发  3D  教程
    C#(读作“C sharp”)是一种简单、现代、面向对象且类型安全的编程语言。C 和 C++ 程序员能很快熟悉它。C# 同时具备“应用程序快速开发”(RAD) 语言的高效率和 C++ 固有的强大能力。(c#语言标准参考如是说)
废话少说,进入主题,开始我们的c#游戏开发之旅!(翻译有误请多原谅)


第一章        组建我们的设备




    1。建立一个DX程序,首先你需要下载Microsoft DirectX  SDK(最好事9.0一下简称DX),安装。然后事要保证你安装了Visual Studio .NET开发产品套件(一下简称vs.net),这是最小环境,然后你就可以进行游戏开发了。
建立一个DX设备。打开DX中的Tutorials文件夹下的Tutorials1例子并打开编译!下面是运行结果:

创建了一个DX窗口!
下面是代码:

//-----------------------------------------------------------------------------
// File: CreateDevice.cs
// 创建设备
// Desc: This is the first tutorial for using Direct3D. In this tutorial, all
//       we are doing is creating a Direct3D device and using it to clear the
//       window.
// 注释:这是第一个使用D3D的教学例子,在这个例子中,我们要作的仅仅是创建以个D3D“设备”和刷新窗口
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
using System;
using System.Drawing;
using System.Windows.Forms;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;

namespace DeviceTutorial
{
        public class CreateDevice : Form
        {
                // Our global variables for this project
                Device device = null; // Our rendering device
                              //我们的绘图设备
                public CreateDevice()
                {
                        // Set the initial size of our form
                        //设置窗体的初始值
                        this.ClientSize = new System.Drawing.Size(400,300);
                        // And it's caption
                        //设置窗体标题
                        this.Text = "D3D Tutorial 01: CreateDevice";
                }
               
                public bool InitializeGraphics()
                {
                        try
                        {
                                // Now let's setup our D3D stuff
                                //现在我们设置D3D的一些选项
                                PresentParameters presentParams = new PresentParameters();
                                presentParams.Windowed=true;//标志着程序运行时窗口模式
                                presentParams.SwapEffect = SwapEffect.Discard;//返回或设置交换区选项????
                                device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);
                                //?,设备的类型(这里选择了硬件),创建图形设备的窗体,创建类型,创建实体);
                                //创建设备实例
                                return true;
                        }
                        catch (DirectXException)//捕捉DX异常
            {
                return false;
            }
                }
                private void Render()//刷新模块
                {
                        if (device == null)
                                return;

                        //Clear the backbuffer to a blue color
                        //将设备窗口刷成绿色
                        device.Clear(ClearFlags.Target, System.Drawing.Color.Blue, 1.0f, 0);
                        //clear(刷屏的参数这里选的是目标,使用的颜色,深度(可能用于模板),模板(0)因为没有使用模板)
                        //Begin the scene
                        //开始渲染场景,(因为没有场景所以一下句是空的就直接结束了场景的渲染)
                        device.BeginScene();
                       
                        // Rendering of scene objects can happen here
                        //可以在这里渲染场景
   
                        //End the scene
                        //结束场景的渲染
                        device.EndScene();
                        device.Present();
                }      
                protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)  //重写OnPaint方法
                {
                        //this.Render(); // Render on painting
                                                        //循环的刷新窗口
                }
                protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e)//重写OnKeyPress方法
                {
                        if ((int)(byte)e.KeyChar == (int)System.Windows.Forms.Keys.Escape)
                                this.Close(); // Esc was pressed
                                                                //如果按下了ESC则退出程序
                }

                /// <summary>
                /// The main entry point for the application.
                /// 程序的主函数,入口点
                /// </summary>
                static void Main()
                {
            //使用USING语句创建对象保证对象的销毁
            using (CreateDevice frm = new CreateDevice())
            {
                if (!frm.InitializeGraphics()) // Initialize Direct3D
                {
                    MessageBox.Show("Could not initialize Direct3D.  This tutorial will exit.");
                    return;
                }
                frm.Show();

                // While the form is still valid, render and process messages
                                //消息循环
                while(frm.Created)
                {
                    frm.Render();
                    Application.DoEvents();
                }
            }
                }
        }
}
代码中有加入的注释!
首先是:
using System;using System.Drawing;using System.Windows.Forms;using Microsoft.DirectX;using Microsoft.DirectX.Direct3D;
      
使用命3名空间!注意的是,在程序的Main主程序中使也用了USING,注意这是c#中的一条语句,using 语句定义一个范围,在此范围的末尾将处理对象。
接着Device device = null;这句是申请了Device类的对象device但并未创建实例对象,实例对象的创建必须使用new语句创建。public bool InitializeGraphics() 函数 的作用是初始化DX,private void Render() 函数是渲染函数,其中的device.BeginScene(); 是开始渲染,device.EndScene();
                        device.Present(); 结束渲染,就如同翻页!可以在BeginScene();和EndScene();函数之中添加图像的显示或文字的显示等其它工作!程序最后的
while(frm.Created)                {                    frm.Render();                    Application.DoEvents();                }
是检测程序是否在执行,是则使用frm实例对象的方法Render();来渲染屏幕,Application.DoEvents();是执行消息循环!
这样!一个简单的DX窗口就建立好了!




       

sf_20041215103315.rar

39.96 KB, 下载次数:

22

主题

119

帖子

119

积分

注册会员

Rank: 2

积分
119
发表于 2004-12-15 10:34:00 | 显示全部楼层

Re:游戏开发教程c# 1

收下

248

主题

2674

帖子

2702

积分

金牌会员

Rank: 6Rank: 6

积分
2702
QQ
发表于 2004-12-15 12:08:00 | 显示全部楼层

Re:游戏开发教程c# 1

我还没用过using的这种用法。
支持一下。

3

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2004-12-15 13:45:00 | 显示全部楼层

Re:游戏开发教程c# 1

    非常感谢 :)  

2

主题

11

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2004-12-15 21:42:00 | 显示全部楼层

Re: Re:游戏开发教程c# 1

茹枫: Re:游戏开发教程c# 1

我还没用过using的这种用法。
支持一下。


MANAGE那么目录下面的每一个例子都是一个USING,看得头晕的说

68

主题

710

帖子

719

积分

高级会员

Rank: 4

积分
719
QQ
 楼主| 发表于 2004-12-16 10:25:00 | 显示全部楼层

Re:游戏开发教程c# 1

其实using语句我也不太明白

我的理解是可以保证在语句结束时释放资源

Microsoft .NET Framework SDK中有解释

using 语句   定义一个范围,在此范围末尾将处置对象。
在 using 语句中创建一个实例,确保退出 using 语句时在对象上调用 Dispose。当到达 using 语句的末尾,或者如果在语句结束之前引发异常并且控制离开语句块,都可以退出 using 语句。


将using语句去掉也可以编译运行,可能时为了安全起见吧!


59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2004-12-17 15:42:00 | 显示全部楼层

Re:游戏开发教程c# 1

有的时候using不能去的

以免你后边的代码无法访问先前使用过的资源
用完了资源就一定用using立即释放
而不要等着垃圾回收来做

2

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2004-12-21 14:18:00 | 显示全部楼层

Re:游戏开发教程c# 1

等待楼主的第二期

68

主题

710

帖子

719

积分

高级会员

Rank: 4

积分
719
QQ
 楼主| 发表于 2004-12-27 14:19:00 | 显示全部楼层

Re:游戏开发教程c# 1

不知吃饭重要还是睡觉重要?????

烦啊!

1

主题

7

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2004-12-27 17:19:00 | 显示全部楼层

Re:游戏开发教程c# 1

偶也看了,虽然什么都不懂,但要表示支持
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-18 09:25

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表