|
使用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蓝蓝的画面出来了。。 |
|
|
|
|
|
|
|
楼主 |
发表于 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的代码 |
|
|
|
|
|
|
|
发表于 25-9-2008 11:42 PM
|
显示全部楼层
|
|
|
|
|
|
|
楼主 |
发表于 26-9-2008 12:06 AM
|
显示全部楼层
这是 C# 帖,不是 C++ 帖。。。
C++ 可以从 internet 下载。 |
|
|
|
|
|
|
|
发表于 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
|
显示全部楼层
|
|
|
|
|
|
|
发表于 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
|
显示全部楼层
呃。。。不大明白你的问题。。。 |
|
|
|
|
|
|
|
发表于 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 原来比简单的乘法慢。。。- using System;
- using System.Diagnostics;
- using System.Collections.Generic;
- using System.Text;
- namespace ConsoleApplication1
- {
- class Program
- {
-
- static void Main(string[] args)
- {
- uint total = 1;
- Stopwatch sw = new Stopwatch();
- sw.Start();
- for (int i = 0; i < 10000; i++)
- {
- total = total * 2;
- }
- sw.Stop();
- Console.WriteLine("Elapsed time for multiply = " + sw.ElapsedTicks.ToString());
- sw.Reset();
- sw.Start();
- for (int i = 0; i < 10000; i++)
- {
- total = total << 1;
- }
- sw.Stop();
- Console.WriteLine("Elapsed time for shift = " + sw.ElapsedTicks.ToString());
- Console.ReadKey();
- }
- }
- }
- Multiply = 172 ticks
- Shift = 188 ticks...
复制代码 << 1 == x2
<< 2 == x4
<< 3 == x8
<< 4 == x16
依此类推。
[ 本帖最后由 geekman 于 27-9-2008 06:17 PM 编辑 ] |
|
|
|
|
|
|
| |
本周最热论坛帖子
|