AVG开发过程记录(1) —— 试探

对面公司的训练项目说是可以放一下了,于是放下心思来做做自己想做的东西。
AVG游戏引擎的开发其实主要要分为三个部分。
1、脚本的设计
2、图形制作(脚本解释器)
3、脚本编辑环境


就目前为止的进度我来稍微谈一下各个方面的进展。
1、脚本
脚本语言其实是一个很灵活的东西,
针对每个不一样的小引擎都会有不一样的方式去构造。
就像在另外一个帖子里面看到的我的脚本比较简单,
当然对那个东西我要做非常革命性的修改,现在只是一个雏形。
脚本设计是我想了最久的东西,一开始的思维方式是怎么样简单的读取。
后来的思维方式是怎么样简单的编辑。
再到现在的尽量全面。反正解释器编辑器我一并提供,开发者无需了解脚本语言的语法。
这段时间对脚本语言的方案做了很多调查,
在nzace的原创区看到了一个逆转裁判的DEMO,非常非常的简单的脚本,指令都很短,很中意。
刚巧DS平台的一个AVGmaker发布了1.0版,和它的作者取得了联系。
他的脚本非常的底层,几乎每一行都是一个函数,各个参数传入后直接给函数。应该说比较复杂。
但是他的脚本很专业。除了游戏方面的控制,它还有脚本控制,这一块我没有考虑过,考虑到的时候也没有打算设计。
我想这些语句的用处只有两个:1、调试。2、分支。
考虑到调试的话的确应该考虑,但分支的方案我是完全不同的,我的分支是通过树状索引找到其他文件的。
吃尽了面向过程的苦头,在文件层面上实现一下面向对象,是我设计的思路,潜规则。
多脚本文件,是我的想法。
关于脚本就是这样。
脚本除了剧情控制以外,还要设计人物文件、声音索引、物品文件等等各个对象的记录。

2、图形
图形是今天花了最多功夫的。
最早想写这个AVG的时候,想法很简单,用windows空间就可以达到效果了,而且不见得很丑。
背景一个picturebox,人物一个picturebox,对话框一个控件(自己写下)。就搞定了。(可能图形没有做好的情况下会有这样一个解释器临时发布)
不过不太现实。我知道多拉也学过VB的图形API,我说过图形是我比较糟糕的一块。这样一个简单的AVG其实可以用API来完成的。
不过似乎是出于执着,我坚持要用更加复杂一点的方法来开发。或者说更加先进一点的。因为公司的培训一直是.net,所以我想用.net开发。
于是就有了后面的探索。
首先是directX,安装了aug,2008版的directX9.0c sdk后,简单的创建了一个窗口。
但是在查了很多资料之后发现,除了3D下建立平面这种方式以外还有更简单的方式。
在directX中提供了6个类:directDraw,directInput,directSound,directPlay,directMusic还有一个忘了,
而directdraw可以完成直接在显存上画画。(无论是GBA,还是PSP这样的掌机都是可以的)这就拥有了游戏机的优势。
于是我查了一些directDraw7的开发方法,也着实弄出了第一个比较简单的程序。
但是回来之后,为了解决alpha半透明的问题我查了很多资料,国内很乱,国外倒是有一些post说道not support这样的说法,而比较显示的方法就是自己写,
原理也不难:点A是背景,点B是前景,那么像素 = B * alpha + A * (1-alpha),其中(0 < alpha < 1),
而要做的就是LOCK SURFACE -> CALCULATE -> UNLOCK。
虽然原理不难,但是实现很难,我看到最快的写法是用27条汇编,痛苦了= = 如果是720线的程序,那一帧要多少时间才能算好。
偶然看到一个资料(先进资料当然是国外的),说directDraw9是支持的,这才发现虽然directX8中没有了directDraw,但是directDraw9却是确实存在的。
而且稍微简单的看了一些VB.NET的实现之后,我发现不但实现方法简单而且功能更强大。但是这势必要抛开之前的,因为连rect的实现方式都不一样。
很郁闷,还好学得快扔得快,只是学着学着就向着资料稀缺的方向去了。本身directDraw大都是C++开发的,用C#.NET的就不多,9更多的使用VB.NET,
好在还是.NET,也知道VB的语法,换到C#来用应该是可以完成的。之后再好好研究9的可行性吧。
在做这些的时候,也想过用openGL来做。1是简单一点点,2是平台转移好一点,毕竟PSP这样的机子也是支持openGL的,不过怎么说呢,学了.net就要吃微软饭了。
后来看到XNA,也觉得不错,好歹是能移植到X360上~,可是07年底就赶时髦搭建过XNA的环境,非常的复杂!不能放弃其他环境啊我,专门弄个电脑差不多。
图形还有一个很麻烦的事情就是字符的显示。如果是ASCII那很简单,就那么几个字符我弄张位图就好了。可是汉字常用的也要2000+个。
网上实现方法无非4中:1、点阵;2、预先准备的剧情图片;3、汉字的位图文件(巨大,光一个宋体40+MB);4、用一个汉字从TTF转换一个。相对还是这个最好些。
似乎XNA有一个SpriteFont的解决方法,哎没办法的,吃苦啊。。。最好是找找汉化组,看看他们是怎么解决字库问题的。尤其是欧版的汉化。

3、编辑
脚本编辑相对是最简单的事情了,在脚本设计好了之后就可以铺开了做了。
我打算写一个集成环境,把需要的工具都集成进去。当然不是开放的,只是我一手搭出来的窗体。
这个区的标题图就是这个程序的雏形。打算采用project这样的处理办法。
至于开发模式是我最犹豫的,是向flash一样的流水时间线呢?还是树状的分支,一个场景一个脚本文件呢?还是再想想吧。

说了这么多算是对近十几个小时(其实很多天了,图形只有十几个小时)探索的总结吧。可以说几乎没有一头是有确定的东西的,不过说回来每一头也都是有进展的。
还好游戏剧本设定之类的东西也不是那么快的。目前为止文字的设定上面都还没有搞定。更不要说人设了。
过会儿再发个帖,总结一下目前为止游戏剧情的设定情况。

OK到此为止。不上一张现在的图形截图。。。简简单单啊


posted @ 2008-10-27 00:48  dark_arthur  阅读(852)  评论(0编辑  收藏  举报