我做了5年硬件工程师,软件方面基础薄弱,而且没认识几个会软件的人。现在需要做一个软件,只能硬着头皮自己上了。在动手之前我想先看看有多少种可能的方法,哪种最省时间。
软件是一个2D图形界面,上面有些图形标尺、指针和文本之类,在一个预定显示区内显示。
有一个外部socket UDP server数据源,我可以控制它发过来的文本格式。在不同的数字域前面加上报头用来辅助解析。
我写的软件首先要创建一个UDP client,然后要解析server发过来的文本,把数据提取到本地变量里面。Socket每收到一个包,本地变量会刷新一次,产生一次更新事件。
每次更新事件触发一次GUI的刷新。GUI上面的元素运行规则很简单。我举个例子,见下图。
图中只有绿色对象是动态的,其余颜色对象都是静止的。
有两个图层,静止的对象在顶层,动态对象在底层。静止顶层的透明部分是窗口,不透明部分会遮盖底层的对象。上图中有一个矩形窗口框住左侧标尺,右侧粗线圆形内部区域是一个窗口,外侧不透明,底部三个文本框各有一个矩形窗口用来显示数字。
图中用到三个float型变量,值显示在底部方框里。socket报文格式可以是"Incoming V1=65.7; V2=6; V3=298.5"。解析后分别赋值给三个变量。
“平移A”用来驱动左侧的垂直标尺,三角形指向的位置就是“平移A”的值。标尺顶端是-10,低端是110,我可以保存为一个狭长的BMP位图。然后在软件里纵向平移到正确位置。
“旋转”用来驱动右侧圆形窗口内的绿色十字线绕圆心转动。绿色箭头指向正上方时旋转值=0,旋转值增大时箭头顺时针方向转动。值到359.99之后会归0。
“平移B”用来驱动旋转后的绿色十字线沿绿色箭头的方向平移,沿箭头方向的那根绿线始终穿过窗口圆心。平移值为正的时候绿线交点在圆心一侧,为负的时候在圆心另一侧,值越大离圆心越远。
做这么个例子就是想说明有对象需要平移和旋转叠加,这个用矩阵应该非常容易实现。
我的环境是Visual Studio 2010 x64,有DirectX SDK(Feb.2010)。我用过MFC、VB、C#,基本上就是Visual Studio里头的这些东西。不过我经验有限,写过基本对话框界面,一些常用的控件都能用,不熟的看MSDN或者来CSDN搜索都可以学会。读英语文档无任何障碍。手里有《Visual C++.NET中文版新概念百例》、《把脉VC++》、《OpenGL游戏编程》,还有两本分别针对WDM和WDF驱动设计的书,跟这个主题关联不大。
因为这个涉及一些图形处理,我没做过。应该有很多种方法。我看见别人做的类似功能的小软件连位图一起才1.6MB,实现的功能和涉及的对象比我贴的范例图示复杂很多。不知是用什么方法做的。
昨天下载了这篇文档《基于Direct3D的2D游戏开发与实现》
http://wenku.baidu.com/view/9a92dcfb770bf78a652954b3.html
看了用DX做2D游戏的大致思路,不过不太清楚是不是有点杀鸡用牛刀了,还希望做过类似东西的朋友指点一下用哪种方法比较快捷,我好进一步查找资料,多谢了。