青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天行健 君子當自強而不息

游戲中物件的定義與使用(5)

 

本篇是游戲中物件的定義與使用(4)的續(xù)篇。

 

使用物品清單系統(tǒng)管理物件

物件被分散在四處,玩家們找到這些物件只不過是一個時間問題。對于這種情況,玩家需要運用一種方法去管理物件,包括使用物品清單控制系統(tǒng)(inventory control system,ICS)來進行分類整理。

請不要誤解,一個ICS并不只適用于玩家,它同樣適用于整個游戲世界。物件可以屬于一張地圖,一個角色,甚至是另一個物件(例如背包,有一些其他的物件在它里面),那就意味著物件需要指定它的所有者(ownership)。除此之外,一個所有者可以擁有一個物件的多個實例(multiple instance),例如貨幣。

所有者的物件收藏稱之為物件清單列表(inventory list),任何物件都可以歸屬到這個列表中去(也包括物件的眾多實例)。所有者,物件清單列表,以及數(shù)量之間的關(guān)系如下表所示:


 

ICS和MIL相互協(xié)調(diào)工作,MIL只保存了世界中每個物件惟一的實例,而ICS則使用了物件的眾多實例。每當ICS需要一個物件的信息時,它可以引用MIL。以這種方式,可以僅使用ICS保存MIL中的物件引用編號(如下圖所示),以節(jié)省大量內(nèi)存。

For your game’s maps and levels, a simple ICS (called a map ICS) consists of only a
list of items and their locations within the map, which is just fine because you can
place objects throughout—ready for characters to pick them up. The real problem
comes when those characters pick them up and add them to their inventory.
Multiple instances pile up, new items are added, and other items are used or
dropped. Things quickly become a real jumble. Handling a collection of character’s
objects is the job of a character ICS, which is a little more complicated than its map
counterpart.

 

開發(fā)一個地圖ICS

The map ICS tracks items that are placed within levels, including items that are
contained within other items—a sword contained within a treasure chest, for
example. The type of map you use determines how you position items within the
map. In 3-D maps, you use three coordinates for positioning an item—the X-, Y-,
and Z- coordinates. Because each map is also unique (each part of the world has
different maps), you can track each map’s items in separate files.

You can represent the map ICS with a structure and a class:

//==================================================================================
// This structure contains map item information list.
//==================================================================================
typedef struct sMapItem
{
    
long    item_index;             // MIL item index
    long    quantity;               // quantity of item (ie coins)
    float   x_pos, y_pos, z_pos;    // map coordinates

    sMapItem*   prev;
    sMapItem*   next;

    
long    index;          // map item index
    long    owner_index;

    sMapItem*   parent;     
// parent of a contained item
    
    sMapItem()
    {
        memset(
this, 0, sizeof(*this));
        owner_index = -1;
    }

    ~sMapItem()
    {
        delete next;   
    }
} *sMapItemPtr;

//==================================================================================
// This class encapsulate map inventory contrl system.
//==================================================================================
typedef class cMapIcs
{
private:
    
long        m_num_items;
    sMapItemPtr m_root_item;

private:
    
long    get_next_long(FILE* fp);
    
float   get_next_float(FILE* fp);

public:
    cMapIcs();
    ~cMapIcs();

    
bool load(const char* filename);
    
bool save(const char* filename);
    
void free();

    
void add(long item_index, long quantity,
             
float x_pos, float y_pos, float z_pos,
             sMapItemPtr owner_item);

    
void remove(sMapItemPtr item);

    
long get_num_items();
    sMapItemPtr get_root_item();
    sMapItemPtr get_item(
long index);
} *cMapIcsPtr;

First, you see the sMapItem structure, which holds the information for every item in
the map. item_index is the MIL item reference number (which ranges from 0 to 1,023
if you used the MILEdit program), and quantity is the number of item_index (to allow
things like a horde of coins to be represented as a single object). Then you see the
item’s map coordinates x_pos, y_pos, and z_pos.

Next comes the prev and next pointers. You insert them to track a linked list of
sMapItem structures. The next couple of variables, index and owner_index, are used when
loading and saving the items in a map. Index stores the current index number of
an item in the linked list. If an item is owned by another item, the Owner variable
holds the index number of the parent object (otherwise, Owner is set to -1). When
loading (or adding) an object, you set the final variable in sMapItem (parent) to point
to the actual owner item’s structure. You can see the sMapItem structure link list concept
illustrated in Figure 15.8.

The sMapItem uses both a constructor and destructor function called whenever a
structure instance is allocated or reallocated. Both functions ensure that the linked
list pointers are in check, and whenever a structure is deleted, all subsequent
sMapItem structures in the linked list are deleted as well.

CAUTION
If you’re removing only a single instance of sMapItem from the linked list, you first have to
set the instance’s Next variable to NULL. Doing so ensures that all subsequent instances in the
linked list are not deleted as well.

The cMapICS class has two private functions (get_next_long and get_next_float) used to read
in text and convert it into a long or float value. The cMapICS class also has eight usable
public functions. Take a closer look at those public functions.


posted on 2007-11-07 18:31 lovedday 閱讀(250) 評論(0)  編輯 收藏 引用


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


公告

導航

統(tǒng)計

常用鏈接

隨筆分類(178)

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

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲精品一二三| 亚洲在线成人| 亚洲欧美激情视频| 亚洲国产精选| 亚洲人成免费| 夜夜躁日日躁狠狠久久88av| 99国产精品久久久久久久| 亚洲视频一区在线观看| 欧美在线视频播放| 牛牛影视久久网| 日韩视频在线免费| 亚洲自啪免费| 欧美成人久久| 国产精品久久999| 国产亚洲aⅴaaaaaa毛片| 狠狠综合久久av一区二区老牛| 亚洲欧洲日本一区二区三区| 亚洲一区二区三区激情| 美国十次了思思久久精品导航| 亚洲日本va午夜在线电影 | 在线亚洲欧美视频| 午夜精品久久久久久久久| 久久亚洲视频| 亚洲国产日韩综合一区| 亚洲第一视频| 在线观看的日韩av| 亚洲第一综合天堂另类专| 日韩一区二区免费看| 午夜视频一区| 亚洲国产精品福利| 欧美专区第一页| 欧美日韩第一页| 一区二区三区在线观看国产| 这里只有精品电影| 欧美成人自拍视频| 亚洲午夜伦理| 欧美另类videos死尸| 国内精品久久久久久久97牛牛| 中文在线不卡| 亚洲国产另类久久久精品极度| 欧美一区二区免费观在线| 欧美三级电影一区| 亚洲精品免费网站| 欧美高清在线视频| 欧美在线视频日韩| 国产欧美日韩一区| 午夜日韩av| 中文av字幕一区| 欧美日韩卡一卡二| 99这里只有久久精品视频| 欧美高清免费| 麻豆精品网站| 亚洲国产欧美日韩另类综合| 老司机午夜免费精品视频| 欧美在线观看网址综合| 国产欧美日韩中文字幕在线| 欧美一区二区国产| 亚洲欧美韩国| 中国日韩欧美久久久久久久久| 亚洲午夜羞羞片| 亚洲精品日韩在线观看| 免费日韩视频| 亚洲国产va精品久久久不卡综合| 麻豆亚洲精品| 蜜桃av一区二区三区| 亚洲韩日在线| 亚洲精品护士| 国产精品高潮在线| 篠田优中文在线播放第一区| 午夜欧美不卡精品aaaaa| 国产在线播精品第三| 欧美h视频在线| 欧美精品激情| 亚洲在线观看免费视频| 亚洲欧美偷拍卡通变态| 狠狠色丁香久久综合频道| 欧美成人精品影院| 欧美日韩免费看| 久久er99精品| 久久综合免费视频影院| 一区二区三区|亚洲午夜| 亚洲香蕉伊综合在人在线视看| 国产日韩欧美a| 亚洲国产你懂的| 国产精品影音先锋| 欧美高清视频在线播放| 欧美午夜精品理论片a级大开眼界| 欧美一区二区日韩| 女同性一区二区三区人了人一| 亚洲一区二区精品| 久久亚洲一区二区| 午夜精品av| 欧美黑人在线播放| 久久久久久精| 欧美午夜性色大片在线观看| 美脚丝袜一区二区三区在线观看| 欧美色图一区二区三区| 老司机精品视频一区二区三区| 欧美日韩亚洲一区| 老司机久久99久久精品播放免费| 欧美午夜精品电影| 亚洲国产精品传媒在线观看 | 久久久久久久高潮| 亚洲天堂成人| 伊人狠狠色丁香综合尤物| 欧美精品久久天天躁| 欧美一区二区三区日韩| 一本色道久久综合一区| 亚洲国产欧美在线| 欧美mv日韩mv国产网站| 男人插女人欧美| 韩曰欧美视频免费观看| 欧美精品videossex性护士| 久久亚洲精品一区二区| 美女国产精品| 欧美成人精品影院| 欧美黄色网络| 欧美日韩在线亚洲一区蜜芽| 久热综合在线亚洲精品| 欧美在线视频一区二区三区| 欧美中文字幕在线| 欧美成人69| 久久午夜国产精品| 国产精品老女人精品视频| 亚洲精品女人| 精品999成人| 欧美制服丝袜第一页| 香蕉久久久久久久av网站| 欧美日本不卡| 亚洲精品国产拍免费91在线| 亚洲老板91色精品久久| 久久亚洲精品一区二区| 免费日韩视频| 亚洲第一中文字幕| 久久人人爽人人| 欧美不卡在线视频| 亚洲人成网站777色婷婷| 美女日韩欧美| 亚洲黄色在线| 中国成人在线视频| 国产精品video| 亚洲伊人伊色伊影伊综合网| 午夜在线电影亚洲一区| 国产麻豆成人精品| 久久国内精品视频| 免费久久精品视频| 亚洲日本一区二区| 欧美日本韩国| 亚洲天堂成人在线视频| 欧美有码视频| 悠悠资源网亚洲青| 久久久免费精品视频| 亚洲电影专区| 在线视频一区观看| 国产精品久久久久久久app| 午夜精品久久久久久久白皮肤| 亚洲欧美清纯在线制服| 国产九九精品视频| 久久超碰97人人做人人爱| 老司机午夜精品视频在线观看| 好吊色欧美一区二区三区四区| 久久久国产亚洲精品| 亚洲第一黄色| 亚洲女人天堂成人av在线| 国产精品久久久久久妇女6080| 午夜精品福利电影| 欧美1区2区视频| 91久久精品日日躁夜夜躁欧美| 欧美日韩国产不卡在线看| 欧美亚洲视频一区二区| 蜜臀va亚洲va欧美va天堂| 中文在线一区| 国产一区二区精品丝袜| 美女网站在线免费欧美精品| 亚洲精品久久久久中文字幕欢迎你| 午夜一区在线| 亚洲精选一区| 亚洲电影激情视频网站| 欧美日韩日本视频| 久久国产精品黑丝| 亚洲精品在线观| 老色鬼精品视频在线观看播放 | 在线日韩中文字幕| 欧美无乱码久久久免费午夜一区| 久久欧美肥婆一二区| 亚洲视频中文| 亚洲精品乱码久久久久久日本蜜臀 | 亚洲色图在线视频| 国模精品一区二区三区色天香| 欧美日韩国产综合新一区| 麻豆精品91| 久久―日本道色综合久久| 午夜精品一区二区三区在线播放| 99精品国产在热久久| 欧美激情视频免费观看| 久久天堂成人| 久久久精品五月天| 久久精品夜色噜噜亚洲aⅴ| 亚洲免费中文字幕| 99精品国产在热久久下载|