• <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>

            天行健 君子當自強而不息

            Controlling Players and Characters(30)

             

            Using the Character Definitions

            The character definitions are templates by nature, so you really need to load up the
            definitions and work with them on a per-instance basis. This means that you need
            to come up with a controller that loads the definitions and tracks each instance of
            a character in your game. What you need is a character controller class.

             

            Creating a Character Controller Class

            Now that you’ve seen what is involved in controlling and defining your game’s
            characters, you can focus on constructing a controller class that takes care of everything
            for you, including adding, removing, updating, and rendering the characters,
            as well as handling the spell effects from the spell controller previously developed.

            Because so much is involved in tracking characters, the job is split into a few structures
            and a single class. Much like spells, a mesh list is required to hold the list of
            used meshes. This time however, the looping information of the animations is not
            contained in the character definitions; another structure is needed to contain the
            character animations that need to be looped.

            When working in artificial intelligence, you create a single structure to store the
            coordinates of route points. Finally, another structure maintains a linked list of
            characters in use. Now, examine each structure just mentioned and the information
            they contain.

             

            Meshes with sMeshAnim

            For the character controller, you
            also have to provide a list of meshes that are used to render the characters. The
            sMeshAnim structure contains the mesh and animation objects and filenames.

            typedef struct sMeshAnim
            {
              char filename[MAX_PATH]; // filename of mesh/anim
              long count; // number of characters using mesh
              cMesh mesh;
              cAnimation anim;

              sMeshAnim() { count = 0; }
            } *sCharMeshListPtr;

             

            Animation Loops and sCharAnimInfo

            The animations used by the characters are set in their ways; either they can or
            cannot loop. Certain actions, such as standing, require a character’s mesh to constantly
            repeat, giving the appearance of constant motion, whereas other animations
            such as swinging the sword only need be performed once.

            By storing a list of the animations that need be looped, the character controller can
            pass the information on to the Graphics Core so that it can handle the hard work
            for you. You store this animation loop information in the sCharAnimInfo structure,
            as follows:

            typedef struct sCharAnimInfo
            {
              char name[32]; // name of animation
              bool is_loop;
            } *sCharAnimInfoPtr;

            To use the structure, you must store the name of the animation (matching the animation
            set name in the .X file) and a flag that tells whether to loop the associated
            animation.

             

            Moving with sRoutePoint

            As previously discussed, you use the sRoutePoint structure to store the coordinates of
            a route point that characters move toward in their never-ending movement
            through the levels.

            typedef struct {
              float XPos, YPos, ZPos; // Target position
            } sRoutePoint;

             

            Tracking Characters with sCharacter

            Things are about to become more complicated because tracking each character
            involves quite a bit of data. In fact, so much data is involved in tracking characters
            (within an sCharacter structure) that you need to see it in pieces:

            typedef struct sCharacter
            {
                
            long        def;
                
            long        id;
                
            long        type;   // PC, NPC, or MONSTER
                long        ai;     // STAND, WANDER, etc

                
            bool        update_enable; 

                sCharDef    char_def;
                cCharIcs*   char_ics;

                
            char        script_filename[MAX_PATH];

                
            long        health_points;          // current health points
                long        mana_points;            // current mana points
                long        ailments;       
                
            float       charge; 

                
            long        action;                 // current action
                float       pos_x, pos_y, pos_z;    // current coordinates
                float       direction;              // angle character is facing
                long        last_anim;
                
            long        last_anim_time;

                
            bool        is_lock;
                
            long        action_timer;

                sCharacter*     attacker;
                sCharacter*     victim;

                
            long            spell_index;
                
            long            target_type;
                
            float           target_x, target_y, target_z;

                
            long            item_index;             // item to use when ready
                sCharItem*      char_item;

                
            float           distance;               // follow/evade distance
                sCharacter*     target_char;            // character to follow
                float           min_x, min_y, min_z;    // min bounding coordinates
                float           max_x, max_y, max_z;    // max bounding coordinates
                
                
            long            num_points;         // number of points in route
                long            cur_point;          // current route point
                sRoutePoint*    route;              // route points

                
            char            msg[128];
                
            long            msg_timer;
                D3DCOLOR        msg_color;

                cObject         
            object;
                cMesh           weapon_mesh;
                cObject         weapon_object;

                sCharacter*     prev;
                sCharacter*     next;

                
            ////////////////////////////////////////////////////////////////////////////
                
                sCharacter()
                {
                    def  = 0;
                    id   = -1;
                    type = CHAR_PC;
                    update_enable = 
            false;

                    ailments = 0;
                    charge   = 0.0f;
                    
                    ZeroMemory(&char_def, 
            sizeof(char_def));
                    char_ics = NULL;

                    script_filename[0] = 0;

                    action       = CHAR_IDLE;
                    last_anim    = -1;

                    is_lock      = 
            false;
                    action_timer = 0;

                    attacker     = NULL;
                    victim       = NULL;

                    item_index   = 0;
                    char_item    = NULL;

                    distance     = 0.0f;
                    target_char  = NULL;

                    min_x = min_y = min_z = max_x = max_y = max_z = 0;

                    num_points  = 0;
                    route       = NULL;

                    msg[0]      = '\0';
                    msg_timer   = 0;

                    prev = next = NULL;
                }

                ~sCharacter()
                {
                    delete char_ics;
                    delete[] route;

                    delete next;
                }
            } *sCharacterPtr;   

            posted on 2007-12-03 23:29 lovedday 閱讀(216) 評論(0)  編輯 收藏 引用

            公告

            導航

            統計

            常用鏈接

            隨筆分類(178)

            3D游戲編程相關鏈接

            搜索

            最新評論

            国产精品久久久久无码av| 伊人久久国产免费观看视频| 青青草原精品99久久精品66 | 久久er热视频在这里精品| 国产精品久久久久久福利69堂| 精品一区二区久久| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 久久夜色精品国产噜噜亚洲AV| 亚洲综合精品香蕉久久网97| 一级a性色生活片久久无| 99久久777色| 久久久www免费人成精品| 91精品国产高清久久久久久国产嫩草| 久久这里只精品99re66| 亚洲国产精品久久久久婷婷软件 | 人妻无码精品久久亚瑟影视| 国产亚洲精品美女久久久| 色99久久久久高潮综合影院| 一本久久a久久精品综合夜夜| 久久久久久九九99精品| 国产精品中文久久久久久久| 国产99久久九九精品无码| 俺来也俺去啦久久综合网| 久久精品国产亚洲av麻豆蜜芽| 久久国产精品国语对白| 久久精品国产91久久麻豆自制| 亚洲AV日韩精品久久久久久久| 一个色综合久久| 久久亚洲天堂| 2021国产精品午夜久久| 久久综合色老色| 一本久久知道综合久久| 久久只这里是精品66| 久久受www免费人成_看片中文| 久久精品综合一区二区三区| 亚洲午夜精品久久久久久人妖| 97久久精品人人澡人人爽| 99久久精品国产毛片| 久久99精品久久久久久噜噜| 久久久久久国产精品免费免费| 亚洲国产天堂久久综合|