使用Arma 3脚本编制的边界框

时间:2017-05-09 20:48:35

标签: sqf

这是一个非常基本的问题。我是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/),但边界框不随车辆一起移动!

1 个答案:

答案 0 :(得分:0)

这是因为车辆的对象bbox在“Draw3D”任务事件处理程序之外定义。一旦定义,事件处理程序代码中使用的此变量将保持不变。

最初,KK的例子不是为了展示移动车辆周围的边界框。

如果要在移动的车辆周围显示边界框,则必须在每个事件发生时定义bbox变量(在事件处理程序代码内)。然后,每个帧上的边界框点的坐标都是实际的。

addMissionEventHandler函数不允许在处理程序代码中传递参数。因此,KK的示例使用全局变量bboxbboxr来存储从事件处理程序代码访问它的边界框信息。

在这种情况下,我更喜欢使用函数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;