很多年没这么喜欢一款游戏了,似乎只有当年的仙剑才有这样的感觉。得写点什么纪念一下。
Flightgear是一款跨平台的飞行模拟软件。可以认为是游戏,但其实更多的是飞行器的物理模型的模拟器。同类型的还有microsoft flight simulator和X Plane,但是微软的模拟飞行更多的是娱乐性,而X Plane则是偏重模拟真实的飞机操作,flightgear就相对更多的注重飞行动力学的物理模型。对比其余两款商业软件,flightgear作为开源软件,画面方面是绝对没有可比性了。但是可玩性方面绝对不差,如果不想折腾盗版,又不愿花几十美元,flightgear绝对是不二选择。不过flightgear最近刚推出2.6版,在画质,特效方面有些进步,虽然仍然差商业软件太远,但是在天空,云朵,水面以及飞机的光影效果方面还是不错的。
1). 安装
Flightgear提供windows版,mac版和linux版。我用的是linux版的。一般linux的源里都会提供包,比如archlinux只需要
sudo pacman -S flightgear flightgear-data
其中flightgear是主程序,data中包括一小部分的地图和飞机。但这个一小部分真的是很小部分而已。比如飞机,大概只有二十几架,而flightgear官方提供了近400架飞机可以选择。所以可以去flightgear的下载页选择飞机下载,也提供了BT下载全部飞机,甚至可以在上面随便找一个ftp mirror,然后复制ftp地址用wget下载全部文件。下载的文件都是zip格式的,解压到 /usr/share/flightgear/data/Aircraft/ 里就行了。然后用
fgfs --show-aircraft | less
就能看到飞机的列表。
2). 设置摇杆
Flightgear靠鼠标和键盘玩实在是没感觉,难度也太大,摇杆是必不可少的。Flightgear对摇杆的支持很好,只要不是太山寨,都没什么问题,可以在这里查看支持的型号。说到摇杆,我得吐槽下了。<吐槽>新加坡买摇杆太不方便了。跑了3,4家电子商店,才找到有卖的,而且就几款而已,方向盘倒是多一些。</吐槽>
摇杆插上电脑后要确定能正常工作,在终端里用
js_demo
然后试着摇动摇杆,按下摇杆上的按键,如果终端里给出相应的反应就说明正常了。同时在按下按键的时候记住终端里 Btns 显示出的数字,配置摇杆的时候就要用这些数字来配置相应的按键。数字由小到大,对应的按键号码就是0,1,2,3,4这样排下去,比如Btns是0001,那么按键就是0号,Btns是0002,按键就是1号。
我的摇杆是Logitech Extreme 3D Pro,所以到 /usr/share/flightgear/data/Input/Joysticks/Logitech/ 里修改相应的.xml文件。比如我的配置文件中有下面这一段:
<button n="5">
<desc>Flaps up</desc>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>controls.flapsDown(-1)</script>
</binding>
<mod-up>
<binding>
<command>nasal</command>
<script>controls.flapsDown(0)</script>
</binding>
</mod-up>
</button>
这就是说定义5号按键的动作,不能长按,执行的动作是controls.flapsDown(-1)。所以按下这个按键的时候,就能控制flap了。
要知道有什么命令,可以在运行flightgear后,查看 Help-Basic Simulator Keys 和 Help-Common Aircraft Keys ,然后到 /usr/share/flightgear/data/keyboard.xml 和 /usr/share/flightgear/data/mice.xml 中搜索相应的命令,然后添加到摇杆的xml文件中。比如刚才那个controls.flapsDown的,就是在keyboard.xml中查找到的。我同时配置了一个恢复默认视角的按键,因为在3D的座舱中,有时上下左右的乱看,看完了以后没法对着正前方,操纵起来就有点麻烦,而鼠标在转换视角的状态下,可以通过按鼠标左键恢复默认视角,所以在mice.xml中找到相应的命令,加到摇杆的xml中:
<button n="1">
<binding>
<command>nasal</command>
<script>
view.resetViewDir();
view.resetFOV();
</script>
</binding>
</button>
所以当按下1号键的时候视角就会恢复默认状态了。另外建议有几个快捷键最好添加,比如trim,就是配平,还有flap,襟翼,这两个在飞默认的Cessena C172p的时候很常用。
编辑好了摇杆的xml文件后最好复制到其他地方保存,因为flightgear-data更新的时候好像会覆盖掉这个文件。
3). 启动程序
Flightgear有很多参数,可以通过
man fgfs
进行查询。包括设置飞机型号,起始机场,天气,气流颠簸,燃油,海拔等等。但有几个一定要设置的。
fgfs --enable-fullscreen --fg-root=/usr/share/flightgear/data --fg-scenery=~/.fgfs/terrasync-scenery:/usr/share/flightgear/data/Scenery --prop:/sim/rendering/multi-sample-buffers=true --prop:/sim/rendering/multi-samples=4 --prop:/sim/rendering/multithreading-mode=CullThreadPerCameraDrawThreadPerContext
--fg-root 是设置fgdata目录,因为Archlinux的flightgear没有安装在flightgear本身默认的位置,所以这个一定要设置,不然无法启动。
--fg-scenery 是设置scenery文件位置,包括地图,地形,地面建筑,机场等数据。这些数据可以在flightgear官方网站下载,但更好地方法是用flightgear自带的terrasync,飞到哪就下载相应地区的scenery文件,很方便。用 : 隔开的两个目录一个是terrasync的下载目录,另一个是flightgear-data安装时自带的一些scenery所在的目录,比如San Francisco的就在这里面。
--prop:/sim/rendering/multi-sample-buffers=true --prop:/sim/rendering/multi-samples=4 这两个是设置Anti Alias的。
--prop:/sim/rendering/multithreading-mode=CullThreadPerCameraDrawThreadPerContext 这是设置利用多核CPU和GPU的。如果不加这句,默认会自动侦测,但不知道为什么,我的貌似自动设置成仅使用一个核,所以如果开了AI traffic,也就是电脑控制一些飞机在天上灰来灰去的,就会卡到不行,每个frame之间可以隔个200ms。设置使用多核心后,基本上每个frame之间隔40ms,非常流畅。
这样就算启动了程序。但是如果没什么意外,进入程序后会发现两眼一抹黑,因为程序的天气和时区是和真实世界对应的,而默认机场在旧金山,对于东八区的我有空闲玩的时候,那边是半夜的概率比较高。所以到 Environment-Time Settings 里选择Noon就好了。截个图
4). 设置
Environment-Scenery Download里可以开启terrasync。两个框都选上,Target directory填 ~/.fgfs/terrasync-scenery 就行。
Environment-Weather里 METAR Source 选 Live data 就能使用真实的天气情况,Update winds aloft 也勾选上。然后点下面的 Advanced Weather ,这个是2.6中进行了很大改善的天气系统,里面包括设置地面雾气厚度,根据天气计算真实视野,开启地形对天气的影响,设置云的大小,对流程度等等,都是可以调节的。
View-Rendering Options里可以设置 Shader effects 。电脑差点就往Performance那边靠,好点就往Quality靠。基本上5和4没什么区别,但是 Shader Options 里 Land mass 可以调小一点,不然地面上会看到一块块突起来的感觉。Skydome的效果是2.6新增的,但是还比较粗糙,在和地平线相接的地方处理的不是很好,但是只是看天空的话还是非常好看,光线效果做的非常好。希望下一版可以继续改进。
AI-Jetway Settings里可以开启 animated jetways 。也就是电脑会控制一些飞机在机场附近飞来飞去,起飞降落什么的,如果是连线多人飞行的话,也能看到其他人的飞机。但是这个开启以后因为每架飞机的飞行空气动力学模型都要加载,然后计算飞行姿态,所以非常耗CPU,如果没开启多核CPU支持就会卡到没法飞了。
这样flightgear就算安装完了。Enjoy your flight!