佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

楼主: geekman

使用C# + Managed DIrectX 制作 2D 游戏

[复制链接]
发表于 24-9-2008 08:04 PM | 显示全部楼层
其实 MDX 也已经算是被 MS 所遗弃的了,MS 现在将精力集中在 XNAGS,MDX 只是他们开发 XNA 的过渡产品,不过 MDX 现在的状况已经足够自给自足,要用它来开发游戏也不是问题的。


谢!!源码收到了,2D和3D我比较喜欢3D, 2D是不是做不到如3D那样飞机飞过地方,呈现阴影。。。

你说MDX 只是他们开发 XNA 的过渡产品,那我要朝向MDX学习,还是XNA学习???

XNA我安装了,介面好像没MDX那么复杂,开个新的WindowsGame,按debug蓝蓝的画面出来了。。
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 25-9-2008 03:17 AM | 显示全部楼层
2D模式是否能够运用光源,这一点我不是很肯定,因为还不曾往这方面去研究。。。想象中应该可以吧?

MDX的作用是让你了解DirectX的基础,XNA已经隐藏起大多数的繁复的界面,好处是简单易用,坏处是造成技术断层,一旦出现bug,没学过DirectX基础的人会觉得茫无头绪,无法自行纠出问题所在。有DirectX根底的人就能够更容易的发现问题出在那里。

目前的趋势,当然是朝向XNA啰,我自己也已经起手在研究XNA了,XNA的好处是,你能够同时攻略PC(Windows)市场和 XBox360 市场。
回复

使用道具 举报

发表于 25-9-2008 01:29 PM | 显示全部楼层
你做的2D和3D游戏基础可以做个XNA版的教学吗? 研究研究

看了你做的3D游戏那个,有个疑问!!那些游戏动画是不是如你做游戏那样做出来的,靠编程控制他的手脚。。。然后加些美术...
回复

使用道具 举报

 楼主| 发表于 25-9-2008 01:41 PM | 显示全部楼层
如果你是指游戏人物的攻击和移动的动作,是的,这些都是依靠对角色模型进行变形(transformation)运算来达到动画效果,但是这些动作却未必需要即时运行,而是可以事先设定好,当玩家按下某个按钮就执行一系列固定的动作(当然要达到这些动作的变形运算还是得即时计算出来的)。
回复

使用道具 举报

发表于 25-9-2008 06:14 PM | 显示全部楼层
怎XNA2.0的源码很少。。。

XNA1.0源码,可以用在你的XNA2.0里跑吗?
回复

使用道具 举报

 楼主| 发表于 25-9-2008 06:39 PM | 显示全部楼层
XNA 不是我的,是Bill Gates的。。。
XNA2应该可以支援XNA1的代码
回复

使用道具 举报

Follow Us
发表于 25-9-2008 11:42 PM | 显示全部楼层
请问下 哪里可以下载你们所谓的C++???
回复

使用道具 举报

 楼主| 发表于 26-9-2008 12:06 AM | 显示全部楼层
这是 C# 帖,不是 C++ 帖。。。

C++ 可以从 internet 下载。
回复

使用道具 举报


ADVERTISEMENT

发表于 26-9-2008 12:12 AM | 显示全部楼层

回复 48# geekman 的帖子

啊啊 看错了=.=C# 2008的可以吗? 在下载当中~
回复

使用道具 举报

发表于 26-9-2008 12:13 AM | 显示全部楼层
请问下 假如我把你给的全部弄好了 会变成怎样?好奇
回复

使用道具 举报

 楼主| 发表于 26-9-2008 12:50 AM | 显示全部楼层
呃。。。应该不会怎么样,因为我在这里所发的三个主题,两个和MDX有关的都是不完整的程式,它们只具备了基本的功能,一个只是教导如何启动Direct3D9 Graphics,并在画面上画上一个可以代表游戏物件(玩家角色)的图像,并可以移动这个图像;另一个则是教导如何启动Direct3D9 的 3D 模式,并载入一些立体模型,并控制代表玩家角色的立体模型;这些程式只是作为基本的教学用途,距离一个完整的游戏还很遥远,要作为一个完整的游戏,还有很多东西我还没放入这些 project 里面,例如:

1)音乐/音效 (Direct Sound)
2)玩家输入 (Direct Input - 目前只涵盖了Keyboard)
3)游戏资料储存/载入 (Data File/Save/Load)
4)游戏里的互动 (Interaction)
5)人工智能(AI)
6)各种运算理论(Algorithm)

别怀疑你的眼睛,编写一个电脑游戏真的不是很简单的,几乎是必须十八般武艺,样样俱全。我现在正在编写着一个简单的理论教学,就是教导电脑如何玩一个简单的游戏 - Tic Tac Toe,也就是那个OOXX的游戏。。。看了你就知道,即使是一个很简单的游戏,要教会电脑如何游玩,并要玩得好,并不是那么简单的。敬请期待(广告一下 )。

至于唯一完整的程式,只是一个普通的粒子系统。

[ 本帖最后由 geekman 于 26-9-2008 12:51 AM 编辑 ]
回复

使用道具 举报

发表于 26-9-2008 12:52 AM | 显示全部楼层

回复 51# geekman 的帖子

看到很晕~哈哈~我会期待的~~~~~
回复

使用道具 举报

发表于 26-9-2008 12:59 AM | 显示全部楼层
你有什么好的新手入门教学吗??
回复

使用道具 举报

 楼主| 发表于 26-9-2008 10:13 AM | 显示全部楼层

回复 53# 不要 的帖子

你可以询问cskoom,他也是新手。
回复

使用道具 举报

发表于 26-9-2008 04:39 PM | 显示全部楼层

回复 53# 不要 的帖子

copy & paste代码,没什么意义,都不明白游戏代码的来龙去脉。。。。

回归根本吧!!,在学习program logic,那些数目搞到头都晕。。。

TO. geekman
ConsoleApplication,只是给予调试代码罢了啊?没其他功能??
回复

使用道具 举报

 楼主| 发表于 26-9-2008 05:31 PM | 显示全部楼层
呃。。。不大明白你的问题。。。
回复

使用道具 举报


ADVERTISEMENT

发表于 26-9-2008 06:38 PM | 显示全部楼层
Visual C# 2005 Express Edition里的new project----->ConsoleApplication调试代码罢了啊?没其他功能??
回复

使用道具 举报

 楼主| 发表于 26-9-2008 10:29 PM | 显示全部楼层
所谓的console program指的是在纯文字模式环境底下执行的程式,一般上是使用在终端机(terminal)上的程式。所谓的纯文字模式就好像DOS Prompt这样的环境。
回复

使用道具 举报

发表于 27-9-2008 01:07 AM | 显示全部楼层
问些离题东西。。研究了几天这算数还没头水。。为何答案是16000
int a = 1000;
            a <<= 4;
            Console.WriteLine(a);
回复

使用道具 举报

 楼主| 发表于 27-9-2008 10:32 AM | 显示全部楼层
<< 是 bit shift,<< 4 就是把数字往左边推进4个位元(bit)。int 是 32 位元,所以 1000 转换成十六进制数字(Hexadecimal) 就是 0x03E8。在十六进制里面每一个数字正好是4个位元(二进制4位数,正好可以代表0~15)。因此:

0x03E8 << 4 = 0x3E80 (把 3E8 往前推一个位数,然后在后面补上一个零 - 二进制就是四个零) = 16000。

以二进制来看的话:

1000(十进制) = 0000 0011 1110 1000(二进制)
=〉往前推4位数 = 0011 1110 1000 0000(二进制)= 16000(十进制)

顺带一提,<< 也可以作为快速的2倍数运算,比起直接运算乘法快速多了:
更正:bit shift 原来比简单的乘法慢。。。
  1. using System;
  2. using System.Diagnostics;
  3. using System.Collections.Generic;
  4. using System.Text;

  5. namespace ConsoleApplication1
  6. {
  7.     class Program
  8.     {
  9.         
  10.         static void Main(string[] args)
  11.         {
  12.             uint total = 1;
  13.             Stopwatch sw = new Stopwatch();
  14.             sw.Start();
  15.             for (int i = 0; i < 10000; i++)
  16.             {
  17.                 total = total * 2;
  18.             }
  19.             sw.Stop();

  20.             Console.WriteLine("Elapsed time for multiply = " + sw.ElapsedTicks.ToString());

  21.             sw.Reset();
  22.             sw.Start();
  23.             for (int i = 0; i < 10000; i++)
  24.             {
  25.                 total = total << 1;
  26.             }
  27.             sw.Stop();

  28.             Console.WriteLine("Elapsed time for shift = " + sw.ElapsedTicks.ToString());
  29.             Console.ReadKey();
  30.         }
  31.     }
  32. }

  33. Multiply = 172 ticks
  34. Shift = 188 ticks...
复制代码
<< 1 == x2
<< 2 == x4
<< 3 == x8
<< 4 == x16

依此类推。

[ 本帖最后由 geekman 于 27-9-2008 06:17 PM 编辑 ]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 27-4-2024 12:52 PM , Processed in 0.080701 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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