请选择 进入手机版 | 继续访问电脑版

QQ登录

只需一步,快速开始

查看: 10153|回复: 5

Flightgear学习_按键处理

[复制链接]

主题

好友

4967

积分

版主

发表于 2016-1-26 15:40:22 |显示全部楼层
Flightgear支持4个输入方式:
        鼠标输入
        键盘输入
        游戏杆输入
       事件输入
对应的子系统分别为:FGMouseInput、FGKeyboardInput、FGJoystickInput、FGEventInput
这几种输入的处理方式大同小异,本文以键盘输入为例,分析flightgear是如何响应键盘消息,以及如何自定义键盘消息。

flightgear处理键盘消息分为以下3个过程:
1.加载配置文件,配置文件包括"preferences.xml",“(your_aircraft)-set.xml/(your_aircraft)-set-common.xml”等。其中键盘的配置信息在/input/keyboard节点内
2.FGKeyboardInput的初始化,也即flightgear注册按键响应函数
3.FGKeyboardInput 的postinit过程,也即绑定按键到对应对象(该对象实现具体的按键响应过程)
具体的流程图如下:
FGKeyboard.JPG

下面来具体看看flightgear是如何响应按键:
以777-20飞机为例,在飞机的配置文件中注册了Ctrl-L按键消息:
          <key n="12">
                <name>Ctrl-L</name>
                <desc>toggle cabin lights</desc>
                <binding>
                    <command>property-toggle</command>
                    <property>controls/lighting/cabin-lights</property>
                </binding>
            </key>

处理过程如下:
1.窗口接收到按键信号
2.窗口任何查询按键注册函数
3.按键注册函数根据按键的类型,得到对应的FGButton,FGButton触发绑定对应的处理函数fire
4.在处理函数中通过
<command>property-toggle</command>的property-toggle查找命令,得到的命令为:do_property_toggle
5.传入该按键的属性节点处理:do_property_toggle(&property)

最后来谈谈如何注册自己的按键消息,该过程如果抛开nasal来说,过程是比较简单的:
1.首先定位文件,一般来说在飞机的配置文件中注册比较合适,对于777飞机来说,可以在777-set-common.xml中注册
2.复制上面xml内容,修改按键的ascii、响应命令,如
<key n="65">
                <name>A</name>
                <desc>toggle cabin lights</desc>
                <binding>
                    <command>property-toggle</command>
                    <property>controls/lighting/cabin-lights</property>
                </binding>
            </key>
这时按键'A'也可以到达CTL-L的效果。

最后,如果大家更深入的了解,可以跟进以下几方面知识:
1.nasal脚本 (flightgear内嵌编译器的一种脚本语言)
2.flightgear支持的命令以及对应的字符串


End
By:zk_sima
email: zk.sima@gmail.com

主题

好友

18

积分

报考学院待录取

发表于 2016-3-15 13:45:45 |显示全部楼层
lz你好,请问一下,怎么读取有关fg自带的2D仪表面板鼠标操作部分的代码
回复

使用道具 举报

主题

好友

86

积分

航院新生

发表于 2016-4-3 23:24:03 |显示全部楼层
非常感谢!!!!:):):)
回复

使用道具 举报

主题

好友

15

积分

报考学院待录取

发表于 2017-2-19 18:54:38 |显示全部楼层
请问摇杆的按键可以设置吗
回复

使用道具 举报

主题

好友

167

积分

版主

发表于 2017-4-8 17:57:04 |显示全部楼层
boyblog 发表于 2017-2-19 18:54
请问摇杆的按键可以设置吗

可以,首先FG默认去匹配你的手柄型号,然后找到对应型号的xml文件,读取按键配置
回复

使用道具 举报

主题

好友

6

积分

报考学院待录取

发表于 2017-10-12 16:06:27 |显示全部楼层
不知道能不能用航模遥控器
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入FG

本版积分规则

手机版|联系我们| FlightGear ( 吉ICP备19002044号-7 )

GMT+8, 2024-3-3 13:11

Powered by Discuz! X3.2

© 2001-2013 FlightGear Inc.

返回顶部