• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            天行健 君子當自強而不息

            Working with Maps and Levels(11)

            Adding Barriers with cBarrier

            Even though the barrier class marks areas on the map using geometric shapes in
            exactly the same way as the trigger class does, the barrier class also positions meshes.
            Looking again at the cBarrier class declaration, notice that each of the add barrier
            functions — add_sphere, add_box, add_cylinder, and add_triangle—have a set of coordinates
            that position and rotate the barrier’s mesh before being rendered.

            To determine where the mesh is positioned, set the x_pos, y_pos, and z_pos arguments
            of the add barrier functions to where you want the mesh rendered. You also need
            to set the x_rot, y_rot, and z_rot arguments to the rotational values to draw the mesh.

            For example, say that you want to add a spherical barrier that already has a mesh
            assigned. The barrier is positioned at coordinates 10,20,30 (with a radius of 40),
            while the mesh is positioned at 10,0,30 using no rotational values. To add the barrier,
            you call the add_sphere function as follows:

            cBarrier::add_sphere(1, TRUE,
                                 10.0f, 0.0f, 30.0f, 0.0f, 0.0f, 0.0f,
                                 10.0f, 20.0f, 30.0f, 40.0f);

            You get a better understanding of adding and using barriers in the next section.

             

            Using the Barrier Class

            Using the barrier class is not difficult; it’s much like using the trigger class. The
            biggest difference is that you have to add object placement data to the barrier data
            files and assign the appropriate meshes and animations.

             

            Creating the Barrier Data File

            The barrier data files are arranged just like trigger data files, except that you start
            each barrier definition with the identification number, type, enabled flag, placement
            coordinates (X, Y, Z), and rotations (X-rotation, Y-rotation, and Z-rotation) to
            place the barrier graphics object. Finish each definition with the respective barrier
            type’s data.

            The following defines two barriers to use (contained in a file called test.bar). Note
            that the coordinates and rotational values of the barrier are shown in bold:

            1 1 1 -900 0 0 0 0 0 -1154 0 10 -645 100 -10
            2 1 0 0 0 -900 0 1.57 0 -10 0 -1154 10 100 -645

            Here are two barriers, both using a box shape. The first barrier’s graphics object is
            placed at -900,0,0 and has rotational values of 0,0,0. The first box covers the area
            from -1154,0,10 to -645,100, -10.

            The second barrier has a graphics object placed at 0,0, -900 and has rotational values
            of 0,1.57,0. The second barrier covers the area from -10,0,-1154 to 10,100,-645.

             

            Loading the Barrier Data

            In order to load and use a barrier data file, instance the cBarrier class, load the data
            file and appropriate meshes, and assign the meshes:

            cBarrier Barrier;

            // Load a barrier data file
            Barrier.Load(“test.bar”);

            // Load a mesh and animation to use
            cMesh Mesh;
            cAnimation Anim;
            Mesh.Load(“barrier.x”);
            Anim.Load(“barrier.x”, &Mesh);

            // Assign mesh and animation to both barriers loaded
            Barrier.SetMesh(1, &Mesh);
            Barrier.SetMesh(2, &Mesh);
            Barrier.SetAnim(1, &Anim, “AnimationName”, 0);
            Barrier.SetAnim(2, &Anim, “AnimationName”, 0);

             

            Checking Barrier Collisions

            To see whether an area on the map is blocked, call get_barrier with the character
            coordinates. If a value of TRUE is returned, passage is blocked, and you should take
            appropriate actions. Take the following example that checks a character’s coordinates
            against all barriers loaded from the barrier list.

            You use a trio of values that represents the direction the character is moving in
            each axis to determine beforehand whether the movement is blocked by a barrier.
            Say that a character is moving 10 units in the position Z-axis, meaning that the
            upcoming ZMove variable will be set to 10. That ZMove variable is added to the character’s
            current position, and if intersecting with a barrier, that ZMove variable is cleared
            out, thus not allowing such a movement along the axis, as shown here:

            // XPos, YPos, ZPos = character coordinates
            // XMove, YMove, ZMove = character movement values
            if(Barrier.get_barrier(XPos+XMove,YPos+YMove,ZPos+ZMove)) {
              // Passage not allowed, clear movement variables
              XMove = YMove = ZMove = 0.0f;
            }

             

            Rendering Barriers

            Last, you only need to call cBarrier::Render to draw all barrier objects within view:

            // Frustum = pre-initialize cFrustum object
            Barrier.render(timeGetTime(), &Frustum);

            posted on 2007-12-10 14:50 lovedday 閱讀(192) 評論(0)  編輯 收藏 引用

            公告

            導航

            統計

            常用鏈接

            隨筆分類(178)

            3D游戲編程相關鏈接

            搜索

            最新評論

            久久精品亚洲AV久久久无码| 国产精品永久久久久久久久久 | 2021久久精品免费观看| 亚洲国产精品无码久久九九| 精品无码久久久久国产动漫3d| 久久精品中文无码资源站| 狠狠人妻久久久久久综合蜜桃| 亚洲伊人久久成综合人影院 | 亚洲国产精品无码久久一区二区 | 新狼窝色AV性久久久久久| 一级做a爰片久久毛片16| 亚洲欧洲久久久精品| 精品国产VA久久久久久久冰| 久久亚洲欧洲国产综合| 久久99精品国产麻豆| 亚洲国产精品无码久久九九| 国产精品久久久久影视不卡| 久久夜色精品国产噜噜亚洲a| 久久亚洲国产精品一区二区| 一本色道久久HEZYO无码| 久久九色综合九色99伊人| 99久久99久久久精品齐齐 | 97热久久免费频精品99| 久久久久亚洲精品无码网址 | 久久精品国产99久久久香蕉| 99久久久国产精品免费无卡顿 | 久久久久青草线蕉综合超碰| 久久国产影院| 91精品国产色综久久| 久久综合丝袜日本网| 三上悠亚久久精品| 热re99久久精品国99热| 亚洲欧美日韩中文久久| 婷婷五月深深久久精品| 无码日韩人妻精品久久蜜桃| 熟妇人妻久久中文字幕| 亚洲香蕉网久久综合影视| 色综合久久久久久久久五月 | 久久久久国产一级毛片高清板 | 亚洲AV日韩精品久久久久久久| 中文字幕亚洲综合久久菠萝蜜|