这是一个非常基本的问题。我是Arma脚本的新手,我正试图在移动的车辆周围找到一个边界框(名为pickup_truck)。我该如何运行这个脚本? http://www.armaholic.com/page.php?id=30924 例如:[pickup_truck] execVM“bb_object_1.sqf”; 我能够得到这个脚本(http://killzonekid.com/arma-3-bounding-box-utility/),但边界框不随车辆一起移动!
答案 0 :(得分:0)
这是因为车辆的对象bbox在“Draw3D”任务事件处理程序之外定义。一旦定义,事件处理程序代码中使用的此变量将保持不变。
最初,KK的例子不是为了展示移动车辆周围的边界框。
如果要在移动的车辆周围显示边界框,则必须在每个事件发生时定义bbox变量(在事件处理程序代码内)。然后,每个帧上的边界框点的坐标都是实际的。
addMissionEventHandler
函数不允许在处理程序代码中传递参数。因此,KK的示例使用全局变量bbox
和bboxr
来存储从事件处理程序代码访问它的边界框信息。
在这种情况下,我更喜欢使用函数BIS_fnc_addStackedEventHandler
。此解决方案允许将参数传递给事件处理程序代码(下面的代码中的pickup_truck)。
采用KK的例子:
[
"Whatever_EVH_Name_You_Want",
"onEachFrame",
{
private _veh = _this select 0;
private _bb = {
_bbx = [_this select 0 select 0, _this select 1 select 0];
_bby = [_this select 0 select 1, _this select 1 select 1];
_bbz = [_this select 0 select 2, _this select 1 select 2];
_arr = [];
0 = {
_y = _x;
0 = {
_z = _x;
0 = {
0 = _arr pushBack (_veh modelToWorld [_x,_y,_z]);
} count _bbx;
} count _bbz;
reverse _bbz;
} count _bby;
_arr pushBack (_arr select 0);
_arr pushBack (_arr select 1);
_arr
};
private _bbox = boundingBox _veh call _bb;
private _bboxr = boundingBoxReal _veh call _bb;
for "_i" from 0 to 7 step 2 do {
drawLine3D [
_bbox select _i,
_bbox select (_i + 2),
[0,0,1,1]
];
drawLine3D [
_bboxr select _i,
_bboxr select (_i + 2),
[0,1,0,1]
];
drawLine3D [
_bbox select (_i + 2),
_bbox select (_i + 3),
[0,0,1,1]
];
drawLine3D [
_bboxr select (_i + 2),
_bboxr select (_i + 3),
[0,1,0,1]
];
drawLine3D [
_bbox select (_i + 3),
_bbox select (_i + 1),
[0,0,1,1]
];
drawLine3D [
_bboxr select (_i + 3),
_bboxr select (_i + 1),
[0,1,0,1]
];
};
},
[pickup_truck]
] call BIS_fnc_addStackedEventHandler;