• <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游戲編程相關鏈接

            搜索

            最新評論

            精品永久久福利一区二区| 国产精品99久久精品爆乳| 久久无码国产专区精品| 亚洲中文字幕久久精品无码喷水| 久久99久久99精品免视看动漫| 国产成人久久精品一区二区三区| 亚洲午夜久久影院| 色婷婷狠狠久久综合五月| 国内精品久久久久久久97牛牛| 国产综合精品久久亚洲| 99精品国产99久久久久久97| 国产精品免费看久久久香蕉| 无码人妻久久一区二区三区免费丨 | 午夜精品久久久内射近拍高清 | 久久久久久久久久久久中文字幕 | 久久久久久国产精品免费免费| 久久久久亚洲av成人网人人软件 | 久久精品国产男包| 狠狠久久综合伊人不卡| 日产精品久久久一区二区| 久久亚洲天堂| 色噜噜狠狠先锋影音久久| 一本色道久久88—综合亚洲精品| 久久久久国产成人精品亚洲午夜| 激情伊人五月天久久综合| 久久99精品国产麻豆宅宅| 中文字幕精品久久| 久久久精品久久久久久| 久久久精品一区二区三区| 久久九九精品99国产精品| 无码超乳爆乳中文字幕久久| 狠狠综合久久AV一区二区三区| 青青草原综合久久大伊人导航| 久久AAAA片一区二区| 国产精品毛片久久久久久久| 成人午夜精品无码区久久| 亚洲中文字幕久久精品无码APP| 亚洲中文字幕无码久久2020| 亚洲午夜久久久久久噜噜噜| 欧美亚洲色综久久精品国产| 国产高潮国产高潮久久久|