关于FSX的SDK的一些心得

这几日接触了一款Microsoft的一款飞行器模拟工具,研究了一下关于它的SDK,微软官方在安装包中加入了关于FSX中的教程,其中详细介绍了关于微软官方给客户端编写插件留下的接口,其次也有一些微软官方的插件简单的Samples。

我整理了一个sample,现在记录一下内容,以备以后可以作为参考。

此为Microsoft的官方samples,我觉得ThrottleControl 比较简单易懂,该sample是一个修改飞机油门的一个插件。具体实现如下。

其次,在编写插件的时候遇到该错误

解决方法:

这两个文件与生成的.EXE文件放在同一个文件夹下即可运行。

关于启动插件设置方法:将FSX包安装到C盘中,然后在如下路径中

会有这两个文件一个库文件DLL,一个EXE的配置文件。

EXE.XML信息

只需将<Path>标签的内容更改成生成的EXE插件所在位置即可。

初次接触FSX一些个人的小小心得以及给以后的相关工作留下一个参考。

详细代码:

//------------------------------------------------------------------------------

//

// simconnect  throttle control sample

//

//  description:

//              pressa to increase the throttle

//              pressz to decrease the throttle

//------------------------------------------------------------------------------

#include<windows.h>

#include<tchar.h>

#include<stdio.h>

#include<strsafe.h>

#include"SimConnect.h"

int     quit = 0;                  //定义一个INT类型变量用来指导用户是否退出模拟器

HANDLE  hsimconnect = NULL;         //最重要的一个变量,建立客户端与模拟器之间的通信

staticenumgroup_id{                 //枚举 一个工作组,用来处理事件,目前没有用到

group_keys,

};

staticenuminput_id {              //定义按钮ID

input_keys,

};

staticenumevent_id {                 //客户端定义的事件

event_sim_start,                   //指模拟器开始执行

event_a,                            //按下A时发生的事件

event_z                             //摁下B时发生的事件

};

staticenumdata_define_id {

definition_throttle,                //客户端定义的油门事件

};

staticenumdata_request_id {

request_throttle,                   //获取模拟器的油门相应数据

};

structstructthrottlecontrol

{

double throttlepercent;             //油门

};

structthrottlecontrol       tc;

voidCALLBACK mydispatchproctc(SIMCONNECT_RECV* pdata, DWORDcbdata, void *pcontext)  ///回调函数   pdata:缓存,客户端和模拟器之间的通信数据/cbdata:数据缓冲区的大小,以字节为单位/pcontext:客户端指定的一个特定指针

{

HRESULT hr;   //声明一个hr用来接受返回值

switch(pdata->dwID)   //dwID pdata缓存数据中的数据编号

{

caseSIMCONNECT_RECV_ID_SIMOBJECT_DATA:   //这个返回类型是飞机本身的一些数据

{

SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE *pobjdata = (SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE*)pdata;   //返回值

switch(pobjdata->dwRequestID)// dwRequestID 包含着客户端定义的请求ID

{

caserequest_throttle:

{

// read and set the initial throttle control value

structthrottlecontrol *ps = (structthrottlecontrol*)&pobjdata->dwData;  //读取初始的油门值

tc.throttlepercent  = ps->throttlepercent;

printf("\nrequest_userid received, throttle = %2.1f", ps->throttlepercent);

// now turn the input events on

hr= SimConnect_SetInputGroupState(hsimconnect, input_keys, SIMCONNECT_STATE_ON);   //开始事件

}

default:

break;

}

break;

}

caseSIMCONNECT_RECV_ID_EVENT:

{

SIMCONNECT_RECV_EVENT *evt = (SIMCONNECT_RECV_EVENT*)pdata;

switch(evt->uEventID)

{

caseevent_sim_start:

{

// send this request to get the user aircraft id

hr =SimConnect_RequestDataOnSimObject(hsimconnect, request_throttle, definition_throttle, SIMCONNECT_OBJECT_ID_USER, SIMCONNECT_PERIOD_ONCE); //绑定要请求的客户端的事件

}

break;

caseevent_a:

{

// increase thethrottle

if (tc.throttlepercent <= 95.0f)

tc.throttlepercent  += 5.0f;

hr =SimConnect_SetDataOnSimObject(hsimconnect, definition_throttle, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeof(tc), &tc);//更改数据

}

break;

caseevent_z:

{

// decrease thethrottle

if (tc.throttlepercent >= 5.0f)

tc.throttlepercent  -= 5.0f;

hr =SimConnect_SetDataOnSimObject(hsimconnect, definition_throttle, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeof(tc), &tc);

}

break;

default:

break;

}

break;

}

caseSIMCONNECT_RECV_ID_QUIT:   //退出模拟器

{

quit = 1;

break;

}

default:

printf("\nreceived:%d",pdata->dwID);

break;

}

}

void testthrottlecontrol()

{

HRESULT hr;

if (SUCCEEDED(SimConnect_Open(&hsimconnect, "throttle control", NULL, 0, 0, 0)))

{

printf("\nconnected to flightsimulator!");

// set up a data definition for thethrottle control

// 将飞行器模拟变量名称添加到客户定义的对象定义中

//通信连接

//客户端定义事件

//飞行器模拟变量名称

//单位

hr = SimConnect_AddToDataDefinition(hsimconnect, definition_throttle,

"general eng throttle lever position:1", "percent");

// request a simulation started event

hr = SimConnect_SubscribeToSystemEvent(hsimconnect, event_sim_start, "simstart");   //请求模拟启动事件

// create two private key events tocontrol the throttle

hr= SimConnect_MapClientEventToSimEvent(hsimconnect, event_a); //绑定事件

hr= SimConnect_MapClientEventToSimEvent(hsimconnect, event_z);

// link the events to some keyboard keys

hr = SimConnect_MapInputEventToClientEvent(hsimconnect, input_keys, "a", event_a); //将键盘按键与事件绑定

hr = SimConnect_MapInputEventToClientEvent(hsimconnect, input_keys, "z", event_z);

// ensure the input events are off until the sim is upand running

hr = SimConnect_SetInputGroupState(hsimconnect, input_keys, SIMCONNECT_STATE_OFF); //关闭事件

// sign up for notifications

hr = SimConnect_AddClientEventToNotificationGroup(hsimconnect, group_keys, event_a);  //将事件放入一个组中

hr = SimConnect_AddClientEventToNotificationGroup(hsimconnect, group_keys, event_z);

while( 0 == quit )

{

SimConnect_CallDispatch(hsimconnect,mydispatchproctc, NULL);  //调用回调函数

Sleep(1);  //1毫米一次

}

hr= SimConnect_Close(hsimconnect);  //关闭连接

}

}

int__cdecl_tmain(intargc, _TCHAR* argv[])

{

testthrottlecontrol();

return 0;

}

Microsoft fsx 飞行模拟器 SDK的一些心得相关推荐

  1. openGL之API学习(一四九)飞行模拟器FSX、P3D、X-plane、MFS2020、FlightGear

    1.FSX Microsoft Flight Simulator Microsoft's Flight Simulator X (FSX) 一般指微软模拟飞行10 .<微软模拟飞行10>由 ...

  2. linux 飞行模拟,为推进2020款微软飞行模拟器开发:微软启动Flight Simulator X Beta测试...

    你对2020年上线的<微软飞行模拟器>(Microsoft Flight Simulator)感兴趣吗?你在Steam上是否已经购买拥有了Microsoft Flight Simulato ...

  3. Prepar3D飞行模拟器中的飞机是怎么制作的?

    一直对飞行模拟器很感兴趣,尤其是Prepar3D(简称P3D). 这是一款由洛克希德·马丁公司开发的飞行模拟软件,它基于微软的Flight Simulator X(简称FSX)开发,可以兼容大部分FS ...

  4. 2097352GB地图数据,AI技术酷炫渲染,《微软飞行模拟器》游戏即将上线

    整理 | 若名 出品 | AI科技大本营(ID:rgznai100) "只要是真实存在的地方,你都能抵达." 作为即将成为第一款将整个地球化作虚拟世界来供玩家玩的游戏,微软的< ...

  5. DJI Flight Simulator 大疆飞行模拟器 安装教程

    DJI Flight Simulator 大疆飞行模拟器 安装教程 大疆公司有一款无人机的飞行模拟器,下面是模拟器的下载教程 首先,到大疆官网的下载中心 点击左边的软件工具,再选择其他软件 找到DJI ...

  6. 情书生成器代码_微软飞行模拟器是对航空的情书

    情书生成器代码 The newest entry in the nearly 40-year-old game series just may be the best one yet. 近40年历史的 ...

  7. WinCE5.0中文模拟器SDK(VS2005,VS2008)的配置

    WinCE5.0中文模拟器SDK的安装过程不细说了,一路默认即可,下面主要介绍如何配置,使其能在VS2005中正常使用. 安装完成后,打开VS2005,点击菜单"工具"--&quo ...

  8. 微软模拟飞行10厦门航空涂装_《微软飞行模拟器》多人游戏模式演示:可组队飞行...

    IT之家3月29日消息 <微软飞行模拟器>(Flight Simulator)是2020年最受期待的游戏之一,开发商Asobo Studio现在分享了一段新的视频,详细介绍了<微软飞 ...

  9. 波音承认 737MAX 飞行模拟器存在缺陷;韩国政府计划从 Win7 迁移到 Linux

    (给技术最前线加星标,每天看技术热点) 转自:开源中国.solidot.cnBeta.腾讯科技.快科技等 [业界资讯] 0.波音承认 737MAX 飞行模拟器软件存在缺陷 据法新社报道,美国波音公司承 ...

最新文章

  1. 焦李成教授谈深度神经网络发展历程
  2. linux monitor模式,ubuntu14.04 安装linux-802.11n csitool Monitor模式
  3. 在2003 server系统上部署DHCP服务器
  4. @有两个含义:1,在参数里,以表明该变量为伪参数 ,在本例中下文里将用@name变量代入当前代码中2,在字串中,@的意思就是后面的字串以它原本的含义显示,如果不...
  5. 【Webkit Blog翻译】深入研究WebRTC | 内有福利
  6. CrystalDiskInfo的下载使用
  7. php 数据导出到excel文件,PHP导出数据到excel文件
  8. c 调用c语言dll数组,C#调用C类型dll入参为struct的问题详解
  9. 避免Eclipse经常出现Out Of Memory
  10. txt形式进行传输WebShell图文演示!
  11. utilities(matlab)—— minFunc
  12. 澜舟科技开源轻量级中文语言预训练模型——孟子模型
  13. 【AAAI会议】三位教父上演神仙打架,Hinton吐槽CNN就是个“垃圾”
  14. 如何格式化基于 Intel 的 Mac?
  15. matlab里的timer,关于Matlab中用timer来实现多线程机制
  16. IP协议(网际协议)
  17. Neo4j Server shutdown initiated by request.解决方案
  18. 用户答题接收答案,并存入数据库
  19. 【大数据运维监控】Prometheus水平扩展Cortex的架构分析
  20. XMind 2021mac苹果手机电脑端 专业版思维导图

热门文章

  1. JPK Data Processing AFM数据处理
  2. 2月9日,30秒知全网,精选7个热点
  3. 邮件服务器DNS设置-----MX、SPF、DKIM记录详解
  4. Redis五大数据类型常用命令
  5. 520情人节送什么礼物合适、送给女生礼物推荐
  6. LeetCode刷题遇到的小知识点总结
  7. 【基本面的量化分析与投资的回报可能 - 上篇】
  8. ios 打包 验证应用失败原因汇总
  9. IDEA中使用快捷键快速定位到报错位置
  10. Workfine5.0扩展功能——如何识别身份证信息?