afsim仿真学习
1. 平台
afsim中每个实体都是一个平台,类似于C++中的类;创建一个平台类似于类的实例化;
# platforms/bomber.txt
platform_type BOMBER WSF_PLATFORM
icon bomber
mover WSF_AIR_MOVER
end_mover
end_platform_type
platform_type CAR WSF_PLATFORM
icon bomber
mover WSF_GROUND_MOVER
end_mover
end_platform_type
- platform_type end_platform_type 表示定义平台类型的脚本代码
- WSF_PLATFORM 是平台类型,属于顶级模型, 没有需要继承的其它父类模型命令。
- BOMBER是定义的平台名称,类似C++中的类名。
- icon bomber 表示平台的显示图标
- mover 表示平台可以移动,用于构建航线。
- WSF_AIR_MOVER 表示对应的运动模型;WSF_AIR_MOVER 是 一 种 为 简 化 空 中 载 具 运 动 而 设 计 的 路 线 Mover 。 使 用WSF_AIR_MOVER 的优点在于, 无需了解平台的质量属性、 空气动力学或推进系统即可模拟空体运动。 运动基于为各种参数(如线性加速度、 速度、 G 力、 径向加速度) 设置的最大限制, 但仅适用于水平面的连续运动。 WSF_AIR_MOVER 的限制在于平台的垂直过渡(高度变化) 。 这些过渡是不连续的, 因为不对过渡的垂直俯仰率和垂直加速度进行建模。 如果希望平台具有连续和平滑的垂直和水平过渡, 请使用 WSF_KINEMATIC_MOVER(如果不需要空气动力学、 质量属性、 推进或高度效应) 或 WSF_P6DOF_MOVER( 如果需要真实的基于物理的建模) 。如果是其他类型平台,比如地面的实例(汽车)使用WSF_GROUND_MOVER, 水中的(船)WSF_SURFACE_MOVER, 太空中的(卫星)WSF_SPACE_MOVER。
之后就可以创建对应平台,scenarios/blue_laydown.txt
# File generated by Wizard 2.9.0 on Apr 3, 2025.
platform car_1 CAR
position 29:52:50.532n 81:43:29.717w
side blue
route
position 29:52:50.53n 81:43:29.72w altitude 0.00 ft agl
speed 50 mph
position 30:51:56.73n 81:43:28.21w
end_route
end_platform
platform car_2 CAR
position 29:34:05.943n 82:18:35.833w
side blue
altitude 0 feet
heading 90 degrees
route
label Waypoint-0
position 29:34:05.943n 82:18:35.833w altitude 0.00 ft
speed 50 mph
label Waypoint-1
position 29:22:39.469n 82:04:18.142w altitude 0.00 ft
label Waypoint-2
position 29:02:42.252n 82:13:26.343w altitude 0.00 ft
label Waypoint-3
position 29:14:25.707n 82:32:43.637w altitude 0.00 ft
goto Waypoint-0
end_route
end_platform
- platform end_platform 表示创建一个平台脚本代码
- platform 后面跟平台的名称
- 最后一个表示平台的类型,就是之前定义的平台类型
- 下一行表示平台的参数,position表示平台位置;side表示平台所属阵营;altitude表示高度;heading表示角度(顺时针);
- route end_route表示航线;平台类型如果有mover移动器,就可以给平台指定航线移动,航线有一系列路径点组成,参数分别是,路径点坐标,高度,速度。

在左边平台细节中可以利用软件图形化调整平台的参数(阵营、类型、标识、坐标经纬度、海拔、方向等等),更改会同步到txt脚本中。
2. 武器
武器也是一个平台,需要定义,然后配置到需要安装的平台上;
# File generated by Wizard 2.9.0 on Apr 10, 2025.
platform_type ATA-MISSILE WSF_PLATFORM
icon missile
mover WSF_STRAIGHT_LINE_MOVER
update_interval .5 s
tof_and_speed
0.0 s 700 kts
20.0 s 500 kts
40.0 s 300 kts
end_tof_and_speed
maximum_lateral_acceleration 9.0 g
guidance_mode lead_pursuit
end_mover
processor tracker WSF_PERFECT_TRACKER
update_interval 1.0 s
end_processor
processor fuse WSF_AIR_TARGET_FUSE
max_time_of_flight_to_detonate 3600 s
end_processor
end_platform_type
weapon_effects ATA-MISSILE-EFFECTS WSF_SPHERICAL_LETHALITY
minimum_radius 1000 m
maximum_radius 1200 m
end_weapon_effects
weapon ATA-MISSILE-LAUNCHER WSF_EXPLICIT_WEAPON
launched_platform_type ATA-MISSILE
weapon_effects ATA-MISSILE-EFFECTS
end_weapon
一个武器由发射逻辑和打击特效两个部分组成,每一个都是一个平台,先是发射平台
- mover end_mover 定义武器平台的运动模型;
- WSF_STRAIGHT_LINE_MOVER 实现了一个用于 WSF_EXPLICIT_WEAPON 的移动器, 该移动器从发射点沿(或多或少) 直线飞行以拦截目标轨迹。 用户无需指定武器的质量属性、 推进或空气动力学表, 但会因此损失一定的保真度。
- tof_and_speed ... end_tof_and_speed 表示武器运动速度与时间的关系,初始700,20s后变化。。。
- processor 定义处理器,WSF_PERFECT_TRACKER是完美跟踪器,
发射平台定义后,还需要定义打击特效,
- weapon_effects end_weapon_effects 表示武器特效。不同武器杀伤范围不同,WSF_SPHERICAL_LETHALITY表示距离杀伤模型,球形杀伤范围。
- maximum_radius表示武器产生效果的最大斜距。
最终定义武器
- launched_platform_type 表示发射平台,使用刚才定义的
- weapon_effects 打击特效,使用刚才定义的
之后修改需要配置武器的平台定义,这里是轰炸机:
# File generated by Wizard 2.9.0 on Apr 3, 2025.
include_once weapons/ata_missile.txt
platform_type BOMBER WSF_PLATFORM
icon bomber
mover WSF_AIR_MOVER
end_mover
weapon ata ATA-MISSILE-LAUNCHER
quantity 4
maximum_request_count 2
end_weapon
execute at_time 1000 sec absolute
Weapon("ata").FireSalvo(MasterTrackList().TrackEntry(0),1);
Weapon("ata").FireSalvo(MasterTrackList().TrackEntry(1),1);
end_execute
end_platform_type
- 增加weapon表示刚才定义的武器,
- quantity 表示拥有武器数量,只有四发子弹
- maximum_request_count 表示同时最大同时攻击的平台数量
- execute end_execute 表示执行器,1000s后,执行其中的脚本代码
- 其中的代码表示,发射子弹攻击track中的对象0,使用1发子弹;TrackEntry(0),1的意思
- 然后攻击track中的对象1,使用1发子弹。
最终的平台创建代码中增加要攻击的平台对象:
platform bomber_1 BOMBER
track platform tank_1 end_track
track platform tank_2 end_track
position 29:30:46.677n 77:54:38.753w
...
end_platform
- track表示把平台tank_1对象增加到bomber_1的攻击队列中,下一行同理;
到此为止,武器的发射逻辑,击打效果,平台配置武器,定义要攻击的对象。就可以实现攻打了;