本帖最后由 PJones 于 2017-8-28 11:48 编辑
首先安利一下自己的Project:http://bbs.sinofsx.com/forum.php ... 60501&extra=&page=1
现在正扎头做API,AS比较欠*,不是那么好调♂教,看之前给我留言的飞友们对这个很感兴趣,不妨稍作注释。
本文由本人积累的经验汇总而成,任何个人/组织(除SINOFSX)以外转载。
如有不足之处,请多多海涵,谢谢您的支持!
【综述】
首先,大家必须明白,由于国内并没有成熟的高端模拟飞行市场,而且相应的设备无论从何处采购都是极其高昂的,意味着,您的模拟机项目可能会耗费您大量的金钱和时间。保守的估计,一台完整的模拟机至少需要10万+人民币左右的预算和至少2-3年的时间。
其实,不论空客抑或波音机,所有的系统都是模块化的,比如MCP/FCU是一个模块,FMC/MCDU又是一个模块,诸如此类;也就是说,所有的部件都是可以模块化设计的。比如,顶板,看似复杂,其实细观空客的前顶板,其实也就是由十个大模块组成的。也就是说,只要在理论上走通一个模块,其余模块是可以批量设计的。虽然设计生产可能会有比较多的问题出现,但是大体上的思路就是:
【1.1 FSX的API接口结构以及接口内容】
首先,科普一下什么是API:
“API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。”
总而言之,就是能用来与FSX内部数据实行交换的一个接口。
自2006年FSX出版之后,开发者们惊喜的发现,FSX提供了的SDK里出现了开发者友好的一个API接口:Simconnect,有了这个,开发者们不再需要Peter的FSUIPC来进行开发了(这对于商业开发者来说无疑是个福音,因为他们能少付一笔版权费)。
FSX的API接口同其所有程序架构一样,都是采用DLL(动态数据连接库)的形式外挂在FSX的主程序下。每次当你装了新插件之后,WindowsDefender和FSX都会弹窗询问你是否要加载(Hook)某一个DLL,当你选择了是,这个DLL就会被列入白名单,每次启动时自动加载;这也就能解释为何FSX在装了一大堆插件之后巨卡开启的原因。机模插件的内部程序透过DLL和Simconnect从FSX的物理引擎读取飞机的某个状态,反之,也可以给FSX的物理引擎写入某个状态。
FSX的API编写主要采用C++,部分动画采用XML 1.0。据我所知,AS的官方开发使用的是VS 2008(当然,个别玩虚幻引擎的大神可能没法装这个版本了)。
总的来说,API接口包含了以下几个功能:
1.读取物理引擎数据
2.向物理引擎写入数据
3.让物理引擎处理数据并返回值
【1.2 兼容性2D面板的制作方法】 既然是模拟舱就肯定要有面板显示,那么,该怎样把ND, PFD一类的面板显示出来呢?
众所周知,AS可是不提供2D面板的(即可以通过Shift+组合键召唤出来的面板),LMCDU除外
那么,我们就要采取“自制2D面板”的策略:
1.直接显示型。直接显示型,顾名思义,就是直接把2D面板的内容用显示器显示出来,其原理非常简单,即把包含在Panel文件夹内的AB_A320.DLL内对应的面板给cite出来,然后自创一个2D面板框用于显示这个。
例(红字部分为我们要添加的,绿子部分为要删除的,蓝字部分为注解):
[Window Titles]
Window00=Main Panel
Window01=Left MCDU
Window02=DEBUG
Window03=PFD
Window04=ND
Window05=
Window06=
Window07=
Window08=
Window09=
Window10=Horizontally Panel Bar -FSX-
Window11=Vertical Panel Bar -FSX-
Window12=Checklist Info -FSX-
Window13=Horizontally Wing View Bar -FSX-
Window14=Vertical Wing View Bar -FSX-
Window15=Checklist Info -P3D-
Window16=Horizontally Panel Bar -P3D-
Window17=Vertical Panel Bar -P3D-
Window18=Horizontally Wing View Bar -P3D-
Window19=Vertical Wing View Bar -P3D-
然后,下到[Windows.XX]界面,自定义[Window03&04]
[Window03]
file=../../Aerosoft Airbus A320_A321 Base/Panel_Fallback/MCDUIMG.bmp
file_1024_night=../../Aerosoft Airbus A320_A321 Base/Panel_Fallback/MCDUIMG_NIGHT.bmp/*这个是背景图片,因为是组合面板,我们不需要*/
Background_color=0,0,0
size_mm=430,726
window_size_ratio=0.250 position=7
visible=0
ident=10021
window_size= 0.350, 0.750
window_pos= 0.650, 0.250
//sizeable=0 /*背景颜色,窗口大小,这个按需*/
gauge00=../SimObjects/Airplanes/Aerosoft Airbus A320_A321 Base/Panel_Fallback/Displays!PFD, 1,684,340,340 /*这一行非常关键,也就是我说的Citation行,引用了DLL中的PFD逻辑在P3D内加以显示(FSX同理)*/
然后,用A卡的Eyefield或者N卡的NGEX来分屏链接多显示器,然后把PFD/ND放上去就好了。
2.数据导出方法
这个相当复杂,需要透过Simconnect和其他API接口把PFD和ND显示的所有数据一并导出然后自己在下位机上编写逻辑来显示,过于冗杂,如同楼下飞友所述“每一台显示器后面都要有刀片”,相当复杂,这里不多做解释了。
以此类推,PFD和ND就可以有效导出到外部屏幕了。
【不定期更新】
|