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

            天行健 君子當(dāng)自強(qiáng)而不息

            Working with Maps and Levels(1)

            Placing Characters on the Map

            While going through the examples, I placed characters on the map in
            a direct, hard-coded manner. However, remember that hard-coding game data is a
            no-no. You need to have as much flexibility as possible when designing your maps,
            and this includes placement of characters in a level.

            Two methods for placing characters in maps that provide the flexibility you want
            involve character map lists and scripts.

             

            Character Map Lists

            In numerous chapters, “Implementing Scripts,” I use external
            data files that store a list of numbers and text. Those data files are loaded and
            parsed into some useful information to the engine loading the data. Action templates,
            for example, contain the action text plus the entry data for each action, all
            in one easy-to-read-and-edit file.

            To adhere to the simple nature of using text data files, you can create lists of characters
            to place within a map when the map is loaded. Because players are placed in
            a map using only a set of coordinates and a direction to face, this data file might
            look something like the following:

            0 100.0 0.0 450.0 0.0
            21 0.0 0.0 -82.0 1.57
            18 640.0 10.0 0.0 3.14

            At first appearance, the preceding three lines of numbers are just that—a list of
            numbers—but the trained eye sees that each number represents something. Starting
            with the first number on each line, you have the following:

            ■ The character’s type (for example: 0=Main Character, 21=Ogre, 18=Child)
            ■ The X-coordinate, Y-coordinate, and Z-coordinate
            ■ The angle that the character is facing (in radians)

            Now knowing what each number means, you can see that I defined three characters
            and placed them through the map at their respective locations and pointed
            them in a certain direction. This data is compact, easy to edit, and can be loaded
            and processed quickly.

             

            Loading Character Map Lists

            To process the data files as just described, you need only two functions.
            These functions are as follows:

            long get_next_long_2(FILE* fp)
            {
                
            char buf[1024];
                
            long pos = 0;    
                
                
            for(;;)
                {
                    
            int c = fgetc(fp);

                    
            if(c == EOF || c == '\n' || (c == ' ' && pos) || pos == sizeof(buf)-1)
                        
            break;

                    
            if((c >= '0' && c <= '9') || c == '.' || c == '-')
                        buf[pos++] = (
            char)c;
                }

                
            if(pos == 0)  // if there is no long value in file
                    return -1;

                buf[pos] = 0;

                
            return atol(buf);
            }

            /////////////////////////////////////////////////////////////////////////////////////////////

            float get_next_float_2(FILE* fp)
            {
                
            char buf[1024];
                
            long pos = 0;    

                
            for(;;) 
                {
                    
            int c = fgetc(fp);

                    
            if(c == EOF || c == '\n' || (c == ' ' && pos) || pos == sizeof(buf)-1)
                        
            break;

                    
            if((c >= '0' && c <= '9') || c == '.' || c == '-')
                        buf[pos++] = (
            char)c;
                }

                buf[pos] = 0;

                
            return (float)atof(buf);
            }

            Both functions take a file pointer (fp) as an argument and return the next long type
            number or float type number found in the specified file. You arrange the character
            map list data file so that the first number (the character type) is a long, although
            the remaining numbers are float.

            Using get_next_long_2 and get_next_float_2, you can parse an entire character map list as follows:

            // fp = file pointer to open character map data file
            long Type; // Character type to load
            float XPos, YPos, ZPos, Direction;
            long NumCharactersLoaded = 0; // # characters loaded

            while(1)
            {
              // Break if no more characters to process
              if((Type = get_next_long_2 (fp)) == -1)
                break;

              // Get coordinates and angle
              XPos = get_next_float_2(fp);
              YPos = get_next_float_2(fp);
              ZPos = get_next_float_2(fp);
              Direction = get_next_float_2(fp);

              // Do something with data - insert a character
              NumCharactersLoaded++; // Increase # characters loaded
            }

            // Done loading NumCharactersLoaded # of characters

             

            posted on 2007-12-09 13:42 lovedday 閱讀(200) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            公告

            導(dǎo)航

            統(tǒng)計

            常用鏈接

            隨筆分類(178)

            3D游戲編程相關(guān)鏈接

            搜索

            最新評論

            久久人人爽人人爽人人片av麻烦| 囯产精品久久久久久久久蜜桃 | 久久久久亚洲AV成人片| 亚洲午夜久久久久久噜噜噜| 国产99精品久久| 国产欧美久久久精品影院| 久久99热只有频精品8| 亚洲七七久久精品中文国产| 久久久无码一区二区三区| 欧美久久一区二区三区| 久久99国内精品自在现线| 久久99热这里只频精品6| 久久亚洲国产精品一区二区| 精品多毛少妇人妻AV免费久久| 伊人丁香狠狠色综合久久| 99久久人妻无码精品系列蜜桃| 久久久WWW成人| 亚洲国产成人久久综合碰碰动漫3d | 狠狠久久综合伊人不卡| 好久久免费视频高清| 亚洲国产精品18久久久久久| 久久夜色精品国产| 狠狠久久综合伊人不卡| 91久久九九无码成人网站| 久久99精品国产99久久6男男| 久久大香香蕉国产| 久久精品国产久精国产思思| 久久亚洲精精品中文字幕| 亚洲va久久久噜噜噜久久男同| 99精品国产免费久久久久久下载 | 精品久久久久久久久中文字幕| 色综合久久中文字幕无码| 亚洲AV日韩精品久久久久久| 精品国产99久久久久久麻豆| 亚洲精品乱码久久久久久蜜桃不卡 | 久久国产精品99国产精| 久久午夜伦鲁片免费无码| 国产午夜福利精品久久2021| 国产V综合V亚洲欧美久久| 久久91亚洲人成电影网站| 国产福利电影一区二区三区久久久久成人精品综合 |