• <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 閱讀(193) 評論(0)  編輯 收藏 引用

            公告

            導航

            統計

            常用鏈接

            隨筆分類(178)

            3D游戲編程相關鏈接

            搜索

            最新評論

            青草影院天堂男人久久| 伊人久久综在合线亚洲2019| 99久久国产综合精品网成人影院| 欧美一区二区久久精品| 久久人人爽人人爽人人片AV高清| 一本一道久久a久久精品综合| 久久亚洲国产精品123区| 久久青青草原国产精品免费| 91精品国产色综久久| 亚洲色欲久久久久综合网| 久久精品国产免费观看三人同眠| 久久亚洲私人国产精品| 大香网伊人久久综合网2020| 思思久久精品在热线热| 久久97精品久久久久久久不卡| 久久精品国产72国产精福利| 99久久做夜夜爱天天做精品| 91精品日韩人妻无码久久不卡| 国产精品久久久香蕉| 91麻精品国产91久久久久| 国产亚洲精品久久久久秋霞| 国产精品日韩欧美久久综合| 狠狠色丁香久久婷婷综合| 国产精品九九久久精品女同亚洲欧美日韩综合区 | 免费无码国产欧美久久18| 久久99国产精品久久99果冻传媒| 久久久这里有精品中文字幕| 大伊人青草狠狠久久| 久久久久人妻一区精品性色av| 久久亚洲精品国产亚洲老地址| 91久久九九无码成人网站| 久久久精品午夜免费不卡| 久久99国产精品尤物| 97精品依人久久久大香线蕉97| 久久综合五月丁香久久激情| 国产成人香蕉久久久久| 成人精品一区二区久久久| segui久久国产精品| 免费观看成人久久网免费观看| 久久人爽人人爽人人片AV| 精品久久久久久无码专区不卡|