游戏开发论坛

 找回密码
 立即注册
搜索
查看: 12189|回复: 27

我的游戏开发学习计划,谢谢指正

[复制链接]

20

主题

136

帖子

172

积分

注册会员

Rank: 2

积分
172
发表于 2005-11-29 09:51:00 | 显示全部楼层 |阅读模式
  我打算进入游戏和多媒体编程领域,我真的相信制作这些东西可以赚到钱。
  也许我应该为自己的求学过程制定一套可用的方法,并加于实践。
  如果我打算从事雕刻或者其他创造性的行业,这样的想法也应该有。我们需要获取大量的信息,毫无疑问,头脑会一直处在高负荷运作,这样我会倍感压力,甚至有晕眩的感觉,然而理想的情况应该是:我还有足够的思维空间用于处理其他更加有趣的事情,如果不从繁重的大脑活动中解放出来,忧郁症或许还会加深——我会发疯。
  之所以会有这篇文档,理由是,在没有足够的理论基础的情况底下,没办法进行实际的游戏开发进程,也许应该做一些事情证明自己真的学到了些什么。
  无论如何,我将会在某些天很好地掌握这些东西。所以现在我可以就学习的问题展开讨论。


  现在我本该在程序堆里打滚,但是不行,我已经感受到了前所未有的压力,甚至象我这样的两天可以读完基本C概念的相关文档(大约相当于一本传统的语言入门书籍)并且可以很好地开始阅读Windows编程并展开编程的天才也感受到的巨大压力。应该在哪里出了什么问题,比如我应该把学习进度设置得更长远一点,但是我确信有一些十分重要的东西在我完成一部分的学习过程后被遗忘掉,当我还想要再重新使用它们的时候我不得不在堆积成山的书籍和文档中翻阅它们。太荒唐了,如果我每一次要使用Office的时候都必须通过光盘缓慢地启动是怎样的感受?这便是需要……

  ※外部存储:学习笔记是必须而且有用的,仅仅在头脑里记忆广泛的形象化的内容,或许还有一些十分有用的要点,遇到实际问题把事先整理分类的笔记拿出来阅读,这些东西要不了多久就会都是你的。一些个人管理和电子日记等小软件可以很好地处理这些文档。我使用Office Diary2005(仅仅1兆就可以完成下载),相信我,即使你已经受不了我的废话,但是当你正式把它用于你的日常写作的时候你会想起我。我曾经因为类似困扰而动了想要编写一个来用的冲动,但是说实话,多看那些控件一眼对自己都是罪过,而且一定有人制作类似小东西。网志也许也可以,但是我不认为世界上有比放在自己家里的计算机的东西更让人安心的了。

  现在即使你的记忆力很是脆弱,但是已经不成问题了。除非你的理解能力大大地有问题。好吧,我不敢肯定是否真的有这样的人,但是一定很多中国人都很熟练地使用了他们的语言和文字,因为他们每天几乎都会用到。尝试把一本C语言教程带入课堂,每天都很努力说服自己去阅读它,一个学期下来,我保证你编译不了一个不是很难的小程序。在我高中的时候就是这样,唯一有机会弄到电脑来操作几下的是学校的计算机课程,那些很久没见过的386电脑。现在哪怕是重复着书本上的代码打一遍,只要知道自己打进去的都是些什么东西都好,至少你现在能做的只有这些,要不然还要更糟糕。要不了10多天,你已经是个C语言专家了,把自己放在电脑前面10多天并不是件难事。

  ※动手实践:你真的打算这样做了么?等等,你知道这些代码都会发生什么事情了么?仅仅是让屏幕上出现象极了书本上的演示的小程序就可以满足你可怜的虚荣了么?做这些事情之前至少也该到处看看类似的说明,SDK的开发文档是你的好朋友,不要吝啬使用它们。最低的可能是你至少能改动代码里的一些逻辑并且不会导致编译和运行错误,要不了多久你就会成为一个编程大师的。

  我们看了很多小代码,或许还有一点点的心得,你已经把自己放在了电脑前面一动不动都已经有10多天了,我不知道你接着这样干下去会有什么后果。期间你肯定怀着满腹激情下载了很多教程和别人编写好的演示,或许还有放在桌上一堆别人推荐你应该购买的书籍。但是别指望你还有足够的信心把它们通读完毕然后就去赚你的100万。放下那些东西。我们写一些有用点的小东西,自己的。你现在掌握的技能足够做这些事情。因为就算是只掌握了_stprint和类似DrawText,SetPixel等几个函数,以及如何初始化和进入循环体,处理基本的键盘输入,你实际可以做的事情足够让你的朋友惊讶不已。

  ※拓展思维:给自己的头脑放几天假,不要担心很多东西在这些天之后全部抛之脑后,事实上只有这样做我们才有可能接着做接下来的事情。虽然我现在冲击游戏制作领域,并且我正好处于需要拓展思维的时期,但是我保证知道未来会发生什么。这是怎样的一种魔法。我曾经学习使用.Net编程,真正困难的时期是在我的思维方式无法理解和接受这些编程环境固化的法则的时候(为此我在近2年的时间里几乎什么也没有学到手,虽然当时我并不是专门想学习并使用这门语言),当我真正进入其通过事件驱动,运行库,属性方法,算法特点等核心,我只用了不到几天的时间在一个小小的窗口上放置几个小控件并尝试修改后便投入到真正的开发计划之中,几乎没有遇到任何的困难。.Net不是作为游戏开发的有效平台,所以我没有打算再使用它,但是举这个例子足够说明,只要有一把小刀,就可以雕刻出完美的艺术品,而不要以为别人会完成你所需要的维纳斯的某个部件并想方设法要把它很好地连接到你正在完成的东西上面也不会觉得很别扭。还有,找到一把合适的小刀自己完成它,而不是一根毛笔,你应该知道我在说什么。

  很多人跟你我一样做这些事情,我知道没有人觉得这是一件暇逸的差事,极可能遇到的问题是:没有火腿面包从屏幕上跑出来,如果这些时候你进入一家厨师培训机构学习烹饪面包,你一定制作了很多可口的面包出来并且你的父母打算花钱在你身上让你去赚更多的钱,或许你还会遇到你心仪的某个女孩,很可能她会喜欢你制作面包的样子,很帅。好吧,这些想法的人早干什么去了。不应该有人强迫你做这些让自己感到难堪的事情,包括你自己。你应该知道,也许你会最后什么也得不到,但是现在你已经狂热到无法摆脱自己的不着边际的想象的作怪,那就接着干吧(我还是觉得烹饪面包更有趣)。

  ※开发演练:我们要完成的东西是做一个游戏不是么?很多人告诉你我们应该掌握很高深的应用数理知识,我们要具备图形,声音输入输出技巧。你告诉他们你现在就只想想完成一个弹球游戏给朋友看而已了么?你应该告诉他们,免得日后他们又出来写文章作怪。一个弹珠游戏需要什么,我想你比我更清楚。首先,它不需要位图的读取,你应该知道这种游戏用任何语言甚至JAVASCRIPT或者窗口控件都可以勉为其难一用。给自己一个机会在实际的游戏开发环境好好干一场,假设你已经知道了Directx的Flip和Blitter技术,也许没有,那有什么问题呢?ASCII码里面或许有一些字符图形看起来还可以,那就让他们在一个简单的窗口里面撞来撞去。好吧,你不知道怎么把文字按位置输入到窗口里面,是时候了,留意一下电视广告,有一家烹饪学校还不错,这可不是什么玩笑。如果有一个学生让你帮他在互联网上找一找资料帮助他写一个圆圆的时钟的时候你大为光火,也许你自己应该能做一个出来。

  你现在有一个看起来不错(或许还带点闪烁“效果”)的弹球游戏,你巧妙移动撞击板而不在朋友面前丢脸,我知道你找到感觉了。

  ※策划作品:想想,做一个有趣的弹球游戏怎么样?DirectX可以帮助你提高运行速度,去看看更多的位图操作,带着之前成功的一份喜悦做这些事情真的感觉很好。让我想想,用得上的书籍真的不算多,不要相信一本你一看就没什么好感的教程可以带领你进入游戏开发的殿堂。你确实需要能够速成的书籍来激发你继续探索的兴趣。只看实现的部分,不要轻易去进入理论的怪圈。试想,有什么理论能够解释它自身呢?只有活动在你眼前的既定事实才能让你相信。而很多书籍除了让你确信自己无法进入这个行业之外,什么也不会留给你,哪怕它声称很多人购买过该书作者的其它作品,也确实有很多文字和代码。实现远比讲道理容易理解一百倍(只要你知道你在干什么)。当你借着速成教材输入一张位图到屏幕指定位置的时候,你可以接着输入任何你要的位图上去,当你成功调动了内存上的某个显示流信息到某个位置后,你就可以在内存上通过类似memcpy,memset,malloc这样的操作函数为所欲为了,至于还有多少的技巧性的东西在这里面,管它呢,连自己都想不到的技巧一定不管用。好了,现在我们已经可以操作类似绘点函数,页翻动,位图输入,裁剪。开始工作吧,制作自己的第一款泡泡堂游戏。

  如果我没有猜错的话,从尝试最基本的游戏逻辑,到完成一个演示作品,用了1星期不到,而在制作策划作品的时候,你可能需要1个多月,你会开始关注更多的东西,游戏目的,界面,绘图工作,技术文档,甚至还偷偷看了一些物理建模的资料。我知道在这个月内你很忙,基本上也顾不上谈女朋友,管它呢。收获就是,你现在已经是一个游戏大师了。甚至你也不必要再去品尝别人的关于物理建模,人工智能,绘图算法库函数的一些残羹了,你就可以自己做这些事情,其过程跟开发一个新游戏一样有趣。如果你玩过游戏,常识会告诉你应该怎么完成一个卷轴游戏。如果有困难有些不错的游戏理论书籍会告诉你应该这么做,如果你不得不到处找代码的话,还是那句话,做一个受人尊敬的面包师傅比你以往任何时候所想的都容易实现。

  ※作品展示:你的第一份可支配投资来自于你的作品的好坏,“我讨厌艺术品”。经济效益如果在你求知过程中还显得很俗的时候,那现在你将不得不考虑它了。然而,并不总是你可以得到很好的机会,那就找一份工作来做,你会爱上它的。每个人都知道你正在处理一些比较繁琐的事务,所以轻易他们不会跟你发脾气,你会受到合理的保护,如果你心情愉悦了,很多人都会因为你的出色劳动而赚到钱。我想从你开始接触游戏编程到现今,不需要一年。

  很多非常有趣的东西不单单是通过无尽的时间和金钱投入去换取的,那种深深触动快乐神经的精灵般可爱的游戏氛围就来自于非常奇巧的构思和实现,一种经久不衰的感动人心的好游戏只有当它呈现到企盼的民众面前的时候才可以真正的对它下定义。

  ※多媒体,网络通讯:专家们,来点很有技巧的声影效果如何?是时候考虑他们了。
  一些很不错的网络通讯协议正被支持着,掌握他们比想象要容易一百倍。
  看到一些有趣的技术技巧都可以拿来一用。如果还有一些精力,放置一些三维的小精灵进去如何?
  我想你已经赚了很多个100万。

20

主题

136

帖子

172

积分

注册会员

Rank: 2

积分
172
 楼主| 发表于 2005-11-29 09:55:00 | 显示全部楼层

Re:我的游戏开发学习计划,谢谢指正

这是我根据以上计划实施的当前情况的总结:


  学习C/C++半个月,我已经写了一个非常简陋的弹球游戏。用了4个小时。
  即使是最简单的游戏,但是它依然需要这些方面的逻辑:
  双缓冲:无论是DX的表面还是GDI的装置位图,都需要一个后备缓冲的表面/位图实现无闪烁,我们需要在不可见的情况下绘图,然后快速翻转或者位块传送到前表面。
  帧频锁定:无论是翻转的等待垂直刷新还是GetTickCount的循环都可以得到一个较合理的稳定帧频,但是都是不严密的,最好是完成由复杂计算构成的循环期,但是肯定有点复杂,至少我还不知道怎么用,并且还有CPU100%占用率的问题。
  碰撞检测:球和移动板的相互关系,可以确定球是否改变朝向,还有壁面的属性,是反弹还是失误判定,也有非常复杂的碰撞检测逻辑,但是在你还不需要使用它的时候,它就一点用都没有。
  物理模型、几何:球会反弹,因为它是球,在自然环境下,因为风向等各种不确定因素,球会抖动,反弹可以通过镜面反射的入射、反射和法线夹角相等的逻辑来计算,抖动只需要Angle+=rand()%n-n/2,也就是随机数。天晓得构筑一座大桥的物理模型该多复杂,才能对它实施拟真爆破,我现在只需要用到一个球面。
  人工智能:人工智能是什么?自动化、应激反应、抽象逻辑思维都算,现在我们和一个CPU的2P角色对打,它要判定球的角度,落球点,然后移动一定距离予以反击,好像很抽象,其实很简单,再不行,只判定球的垂直位移总可以?
  胜负、游戏状态:没有胜负,游戏就无从谈起,既然有胜负,那也要有再来一次这样的允许选择项,如何确定各个游戏状态,至少也应该预先规划一下。毕竟这种大块面的东西不是可以边写代码边概括的。
  还有更简单的游戏么?但是同样的,这些所谓模型、智能实现起来是出奇的简单,为什么一定要等待你以为你学会了某种技巧、某种思维方式、某种代码写作方式才开始尝试去做点什么?但是你现在连初始化都做不了,就好像你读了好几年的高等数学结果一转身什么都做不了,学了10几年的英语老外的话还是一句也听不懂,换成了外国人也许他们三岁就已经很伶俐,这绝对不是智商的问题。
  经常用、合理用、站着想、躺着也想。把自己融入到整个代码和思维逻辑世界里去,这是你需要这么做,如果你不打算这样做,就好比你不打算呆在中国和中国人用汉语进行交流一样,只好出国。
  那么我们应该怎么得到如此多复杂的运算法则、物理模型、人工智能到代码片断的置换等,也许稍稍给自己一点压力是必要的,因为过不了多久,你就打算开发一个更为复杂的游戏出来,这些经历会让你得到更多的,当然不能总是让自己的脑袋闲着,做这些事情确实需要你应用一下自己的聪明才智,如果你不是这么想的,不是打算这么干的,那你还有什么理由再说:为了中国游戏的美好未来,我豁出去了。
  当一些任务对你来说好似特别困难,你需要实际、合理的分析,首先对自己的能力和知识面要了然于胸,才能做到临危不惧,当分析结果是目前的能力无法胜任,但是你知道怎么缩短乃至克服这些差距,那就应该去获取相应资源,如果获取相应资源本身具有时间性长、难度大的特征,当然这些应该预先预料到的,那就退而求其次,替换其他解决方案,乃至放弃努力都是可取的。

248

主题

2674

帖子

2702

积分

金牌会员

Rank: 6Rank: 6

积分
2702
QQ
发表于 2005-11-29 14:25:00 | 显示全部楼层

Re:我的游戏开发学习计划,谢谢指正

不错。边学边用是王道。

154

主题

4567

帖子

4579

积分

论坛元老

Rank: 8Rank: 8

积分
4579
QQ
发表于 2005-11-30 00:46:00 | 显示全部楼层

Re:我的游戏开发学习计划,谢谢指正

X_X ....弓虽

1

主题

40

帖子

45

积分

注册会员

Rank: 2

积分
45
发表于 2005-11-30 13:33:00 | 显示全部楼层

Re:我的游戏开发学习计划,谢谢指正

支持,祝楼主成功

2

主题

81

帖子

81

积分

注册会员

Rank: 2

积分
81
QQ
发表于 2005-11-30 23:38:00 | 显示全部楼层

Re:我的游戏开发学习计划,谢谢指正

不知道该回什么好了。
用了大半天时间看完了LZ的文章,感慨……很遗憾,没有!有的只是会心的一笑罢了。
别误会,这绝对不是带着某种意味的笑,就算有点共鸣吧,也许是的。

140

主题

1228

帖子

1233

积分

金牌会员

Rank: 6Rank: 6

积分
1233
QQ
发表于 2005-12-1 00:00:00 | 显示全部楼层

Re:我的游戏开发学习计划,谢谢指正

天才的话,不妨试试来我们公司
www.masq.com.cn
前提是你先要熟练掌握c++哦。

呵呵,感觉文字很搞。

140

主题

1228

帖子

1233

积分

金牌会员

Rank: 6Rank: 6

积分
1233
QQ
发表于 2005-12-1 00:09:00 | 显示全部楼层

Re:我的游戏开发学习计划,谢谢指正

不过感觉这个天才的标准低了点,这样的天才未免多了一点点。

20

主题

136

帖子

172

积分

注册会员

Rank: 2

积分
172
 楼主| 发表于 2005-12-1 10:35:00 | 显示全部楼层

Re:我的游戏开发学习计划,谢谢指正

写这篇计划的主要目的是勉励自己。

现在我正在写简化编程的函数库,暂时结构比较凌乱,数据纠结在一起,尤其是动画部分:
typedef struct tagANIM
{
        INT x; //当前位置
        INT y;
        SPRITE sprite[50]; //精灵图
        UINT spcount; //分配帧
        UINT frame; //时间轴
        UINT cur; //当前帧
        INT step; //帧频
        UINT height; //源大小
        UINT width;
        UINT heightPOS; //缩放大小
        UINT widthPOS;
        UINT type; //类型判别
        UCHAR visible; //允许覆盖
        UCHAR play; //播放
}ANIM,*LPANIM;

typedef struct tagSPRITE
{
        DDSURFACEDESC2 ddsd;
        RECT rect; //源大小
        RECT rectPOS; //显示区
        RECT rectCLIP; //位图集合裁剪区
        LPDIRECTDRAWSURFACE7 lpsurface;
        UINT type;
        UCHAR visible;
}SPRITE,*LPSPRITE;
各位,我的图形库还有救么?

8

主题

91

帖子

93

积分

注册会员

Rank: 2

积分
93
发表于 2005-12-1 12:43:00 | 显示全部楼层

Re:我的游戏开发学习计划,谢谢指正

看了你的文章,比较头晕,可能是我快速整理一堆逻辑混乱的文字的能力比较差吧。谈点感想,首先,正如楼上说的,很搞。其次,感觉像是一个有点自夸有点废话的梦魇。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-23 17:40

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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