FlightGear
FlightGear是一款开源飞行模拟器。项目始于1997年,主要目标是为学术科研领域创造一个尖端的飞行模拟器框架,也可拓展到飞行训练,飞行仿真,模拟飞行游戏等方面。
它支持全球三维实景,20,000多个跑道、400多种飞行器、跨平台、多人联飞、多样的开放飞行数据模型等功能。
官网直达 | 中文官网
FlightGear下载
官网:https://www.flightgear.org/
进入官网首页就可以看到大大的【Download Now and Fly Free!】
然后就可以选择对应的版本,如果想添加其他飞机就点击下面的Download Aircraft。
因为我是Win10就选择【FlightGear 2020.3 for windows】链接,然后跳转到下面这个界面,等待下载完成即可。
安装流程较为简单,这里不再赘述,一直下一步即可。
nasal 脚本
nasal脚本起源
NASAL是FlightGear使用的一种非常强大的脚本语言系统,它与FlightGear关系十分密切,可以读取、修改FlightGear的属性树中的属性值,可以函数直接访问FlightGear的内部数据,可以创建GUI对话框,等等。要想深入的理解FlightGear,并对其进行开发,NASAL是一个强有力的工具。
nasal脚本介绍
NASAL全称是Not Another Scripting Language。NASAL借鉴了如Javascript、Python、Perl等流行的脚本语言系统的设计理念,实现了一个简单且完整的OOP(面向对象程序设计)脚本语言系统,并且是不依赖于操作系统平台的。NASAL内置了一个垃圾回收器来管理内存。
NASAL的语法规则有点类似于Javascript。
FlightGear提供了很多用于库函数,这些函数都可以被NASAL直接调用。
NASAL代码可以在FlightGear的aircraft配置文件中调用执行,也可以嵌入到XML文件里面执行。FlightGear中有各种XML文件用于描述对话框、指定物体动作、响应键盘游戏杆的操作、对应场景中的物体等等。这些XML文件中都可以嵌入NASAL代码并执行。
使用FlightGear内置的环境
首先进来是这样一个界面。我们不需要过多的操作,除非你想开飞机。这里我们直接点击左下角的开始飞行。
点击上方功能菜单的【Debug】-》【Nasal Console】
然后在代码区中写入代码,然后点击右下角的【Execute】按钮。即可执行脚本。
使用开源的Nasal脚本解释器
这里贴一下这位作者的账号以及开源库
大佬的bilbil账号 | GitHub | Gitee
进不去GitHub的小伙伴可以点击Gitee进入下载。下载好之后大体就是下面这个样子。
在README.md中详细说明了Win\Linux\IOS的环境搭建。下面贴出VS环境的搭建过程。
Create VS project | 创建 VS 工程
First | 首先
Make sure you are using VS 2022.
确保你使用的是 VS 2022。
How to Create VS project
1.Get code from this repo using git.
2.In Visual Studio, click File->New->Project From Existing Code....
3.Select Visual C++->Next->choose project file location->write the project name at ease->Finish.
4.Remove cpp files in module to avoid compilation problems.(they should be compiled to dynamic libraries)
5.Click Source Files in Search Solution Explorer at left, right click main.cpp, compile.
如何创建VS工程
1.用git从这个仓库获取代码。
2.在VS的界面,点击文件(F)->新建(N)->从现有代码创建项目(E)。
3.选择创建Visual C++项目->下一步->项目文件位置选择你下载的代码存放的文件夹->填项目名称,随便写->完成。
4.从项目中去掉 module 里的cpp文件,以防止编译错误。(那些本应该编译到动态库)
5.点开左侧解决方案资源管理器中的Source Files,右键点击main.cpp,编译。
会遇到问题
重定义问题
这里需要注意的是,你不能将model模块添加到vs工程中,否则会报重定义问题,关于这个问题我在bilbil上问过作者。
无法将参数1从WCHAR[260]转换为char
这个问题我也咨询过作者,作者称这是字符集设置的问题,并且已将版本进行更新。
解决方法我贴下面,你们如果使用的话应该不会报这个错误了。
指针类型转换报错
这里我们使用C++11的强制类型转换reinterpret_cast
就可以了
解决方法
项目配置
我将项目的输入路径改到项目根路径了,这样方便与库函数查找,否则还需要在项目配置添加库函数的路径。
使用nasal解释器
先将项目进行编译,然后在项目根路径上面路径那块输入cmd,然后回车,就打开cmd并在当前路径下。
然后输入chcp 65001
命令,回车。
在当前路径创建一个1.nas
的脚本文件。
然后在cmd中输入 nasal.exe 1.nas
回车。
语法:可执行程序 脚本文件