Microsoft fsx 飞行模拟器 SDK的一些心得
关于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的一些心得相关推荐
- openGL之API学习(一四九)飞行模拟器FSX、P3D、X-plane、MFS2020、FlightGear
1.FSX Microsoft Flight Simulator Microsoft's Flight Simulator X (FSX) 一般指微软模拟飞行10 .<微软模拟飞行10>由 ...
- linux 飞行模拟,为推进2020款微软飞行模拟器开发:微软启动Flight Simulator X Beta测试...
你对2020年上线的<微软飞行模拟器>(Microsoft Flight Simulator)感兴趣吗?你在Steam上是否已经购买拥有了Microsoft Flight Simulato ...
- Prepar3D飞行模拟器中的飞机是怎么制作的?
一直对飞行模拟器很感兴趣,尤其是Prepar3D(简称P3D). 这是一款由洛克希德·马丁公司开发的飞行模拟软件,它基于微软的Flight Simulator X(简称FSX)开发,可以兼容大部分FS ...
- 2097352GB地图数据,AI技术酷炫渲染,《微软飞行模拟器》游戏即将上线
整理 | 若名 出品 | AI科技大本营(ID:rgznai100) "只要是真实存在的地方,你都能抵达." 作为即将成为第一款将整个地球化作虚拟世界来供玩家玩的游戏,微软的< ...
- DJI Flight Simulator 大疆飞行模拟器 安装教程
DJI Flight Simulator 大疆飞行模拟器 安装教程 大疆公司有一款无人机的飞行模拟器,下面是模拟器的下载教程 首先,到大疆官网的下载中心 点击左边的软件工具,再选择其他软件 找到DJI ...
- 情书生成器代码_微软飞行模拟器是对航空的情书
情书生成器代码 The newest entry in the nearly 40-year-old game series just may be the best one yet. 近40年历史的 ...
- WinCE5.0中文模拟器SDK(VS2005,VS2008)的配置
WinCE5.0中文模拟器SDK的安装过程不细说了,一路默认即可,下面主要介绍如何配置,使其能在VS2005中正常使用. 安装完成后,打开VS2005,点击菜单"工具"--&quo ...
- 微软模拟飞行10厦门航空涂装_《微软飞行模拟器》多人游戏模式演示:可组队飞行...
IT之家3月29日消息 <微软飞行模拟器>(Flight Simulator)是2020年最受期待的游戏之一,开发商Asobo Studio现在分享了一段新的视频,详细介绍了<微软飞 ...
- 波音承认 737MAX 飞行模拟器存在缺陷;韩国政府计划从 Win7 迁移到 Linux
(给技术最前线加星标,每天看技术热点) 转自:开源中国.solidot.cnBeta.腾讯科技.快科技等 [业界资讯] 0.波音承认 737MAX 飞行模拟器软件存在缺陷 据法新社报道,美国波音公司承 ...
最新文章
- 焦李成教授谈深度神经网络发展历程
- linux monitor模式,ubuntu14.04 安装linux-802.11n csitool Monitor模式
- 在2003 server系统上部署DHCP服务器
- @有两个含义:1,在参数里,以表明该变量为伪参数 ,在本例中下文里将用@name变量代入当前代码中2,在字串中,@的意思就是后面的字串以它原本的含义显示,如果不...
- 【Webkit Blog翻译】深入研究WebRTC | 内有福利
- CrystalDiskInfo的下载使用
- php 数据导出到excel文件,PHP导出数据到excel文件
- c 调用c语言dll数组,C#调用C类型dll入参为struct的问题详解
- 避免Eclipse经常出现Out Of Memory
- txt形式进行传输WebShell图文演示!
- utilities(matlab)—— minFunc
- 澜舟科技开源轻量级中文语言预训练模型——孟子模型
- 【AAAI会议】三位教父上演神仙打架,Hinton吐槽CNN就是个“垃圾”
- 如何格式化基于 Intel 的 Mac?
- matlab里的timer,关于Matlab中用timer来实现多线程机制
- IP协议(网际协议)
- Neo4j Server shutdown initiated by request.解决方案
- 用户答题接收答案,并存入数据库
- 【大数据运维监控】Prometheus水平扩展Cortex的架构分析
- XMind 2021mac苹果手机电脑端 专业版思维导图