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

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

Working with Maps and Levels(9)

Blocking the Path with Barriers

You know—detecting when your character is walking around the map bumping into walls or standing
on solid ground. What about objects such as doors blocking your character’s way?
Because a door is not part of the terrain, I didn’t include a door when I constructed
the collision detection code. Now is the time to remedy that situation.

Anything that bars clear passage of a character’s movement is called a barrier.
Barriers can exist in two states—open (disabled) or closed (enabled). Characters
are allowed to pass through a barrier when it is open, but they cannot pass through
when the barrier is closed.

You can treat barriers much as you do triggers. You can define a barrier similar to
the way you define a trigger on a map. You can define barriers as spheres, boxes,
cylinders, and triangles. Barriers can also have an enabled state, with true meaning
that the barrier is blocking the character’s passage and false meaning that the way
through the barrier is clear.

The big difference between barriers and triggers is that barriers can have meshes
and animation assigned to them. This relieves you of the burden of drawing the
barrier and gives the job to the barrier engine. All you have to do is assign the
meshes and animations.

You start off using barriers with the barrier class declaration,
which looks very similar to the trigger class declaration. Notice that I also
define an enum list and structure (sBarrier) used to contain each barrier’s data:

enum BarrierType
{
    BARRIER_SPHERE = 0, BARRIER_BOX, BARRIER_CYLINDER, BARRIER_TRIANGLE
};

/********************************************************************************************/

typedef 
struct sBarrier
{
    
long    type;  // BARRIER_SPHERE, BARRIER_BOX, etc.
    long    id;
    
bool    enabled;

    
float   x_pos, y_pos, z_pos;
    
float   x_rot, y_rot, z_rot;

    
float   x1, y1, z1;
    
float   x2, y2, z2;
    
float   x3, z3;

    
float   radius;

    cObject 
object;

    sBarrier*   prev;
    sBarrier*   next;

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

    sBarrier()  
    { 
        prev = next = NULL; 
    }

    ~sBarrier() 
    { 
        delete next; next = NULL;  
    }
} *sBarrierPtr;

Here’s where the similarities between the triggers and barrier end. A barrier needs
a graphical representation (a 3-D mesh), so the code adds a Graphics
Core cObject object that is used to contain the barrier’s mesh and animation data.

Getting back to the similarities of the trigger and barrier classes, notice the pointers
that maintain the linked list as well as the sBarrier structure constructor and
destructor.

The similarities between triggers and barrier continue with the declaration of the
barrier class:

typedef class cBarrier
{
private:
    
long        m_num_barriers;
    sBarrier*   m_root_barrier;

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

public:
    cBarrier()
    {
        m_num_barriers = 0;
        m_root_barrier = NULL;
    }
    
    ~cBarrier()
    {
        free();
    }

    
void free()
    {
        delete m_root_barrier;
        m_root_barrier = NULL;

        m_num_barriers = 0;
    }

    
long get_num_barriers()
    {
        
return m_num_barriers;
    }

    sBarrier* get_root_barrier()
    {
        
return m_root_barrier;
    }
 

Shift your focus for a moment to the arguments that the add_barrier function is taking.
Aside from the position in which to position the barrier (using the x_pos, y_pos,
and z_pos arguments), the add_barrier function takes the rotational values in which to
draw the barrier’s mesh (using the x_rot, y_rot, and z_rot arguments that represent the
X-, Y-, and Z-rotational values, in radians, respectively).

Notice that the addition of rotational values throughout the barrier class, as well as
the addition of an extra trio of coordinates that define the mesh’s position in the
world. As you come upon these additional values, I’ll be sure to point them out.

    sBarrier* add_barrier(long type, long id, bool enabled,
                          
float x_pos, float y_pos, float z_pos,
                          
float x_rot, float y_rot, float z_rot)
    {
        
// allocate a new barrier structure and link in

        sBarrier* bar = 
new sBarrier;

        bar->prev = NULL;
        bar->next = m_root_barrier;

        
if(m_root_barrier)
            m_root_barrier->prev = bar;

        m_root_barrier = bar;

        bar->type    = type;
        bar->id      = id;
        bar->enabled = enabled;
        bar->x_pos   = x_pos;
        bar->y_pos   = y_pos;
        bar->z_pos   = z_pos;
        bar->x_rot   = x_rot;
        bar->y_rot   = y_rot;
        bar->z_rot   = z_rot;

        m_num_barriers++;

        
return bar;
    }  

posted on 2007-12-10 13:50 lovedday 閱讀(194) 評(píng)論(0)  編輯 收藏 引用


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


公告

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

隨筆分類(178)

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

搜索

最新評(píng)論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国内成+人亚洲| 亚洲一区二区欧美| 中国日韩欧美久久久久久久久| 欧美黑人多人双交| 夜夜嗨av色一区二区不卡| 亚洲欧美在线播放| 在线国产日韩| 欧美日韩久久精品| 亚洲欧美视频在线观看| 美女亚洲精品| 制服丝袜激情欧洲亚洲| 国产亚洲欧美日韩精品| 美日韩丰满少妇在线观看| 99re热这里只有精品免费视频| 先锋a资源在线看亚洲| 在线观看欧美日韩国产| 欧美日韩国产探花| 久久精品日产第一区二区| 最新精品在线| 欧美影院成人| av不卡在线看| 韩国成人福利片在线播放| 欧美连裤袜在线视频| 欧美一区二区三区免费视| 最新高清无码专区| 久久精品欧美日韩精品| 一本综合精品| 一区二区亚洲精品国产| 国产精品久久久久秋霞鲁丝 | 亚洲高清久久久| 欧美午夜宅男影院在线观看| 久久精品免费播放| 亚洲天堂免费观看| 亚洲丶国产丶欧美一区二区三区| 先锋影音国产精品| 99热这里只有成人精品国产| 精品成人在线视频| 国产精品视频福利| 欧美经典一区二区三区| 久久久久免费视频| 午夜精品成人在线视频| 日韩视频欧美视频| 亚洲国产精品va在线看黑人动漫| 久久www成人_看片免费不卡| 亚洲午夜在线观看| 日韩性生活视频| 亚洲国产综合在线看不卡| 国产一在线精品一区在线观看| 欧美日韩一区二区三区视频| 欧美国产精品一区| 久久亚洲综合| 久久精品国产77777蜜臀| 亚洲综合国产精品| 亚洲视频导航| 99在线热播精品免费99热| 91久久久久| 亚洲国产精品123| 欧美大片免费久久精品三p | 一本一本a久久| 亚洲精品一二| 亚洲人成人77777线观看| 在线日本成人| 亚洲高清在线观看| 在线精品亚洲一区二区| 一色屋精品视频在线看| 在线电影国产精品| 伊人久久大香线蕉av超碰演员| 国产一区二区三区久久 | 亚洲国产精品久久久久久女王| 美日韩丰满少妇在线观看| 久久视频在线视频| 美国三级日本三级久久99| 久久久久久夜| 免费成人高清视频| 亚洲国产精品va在看黑人| 亚洲国产经典视频| 亚洲免费av片| 亚洲一区二区三区在线观看视频| 亚洲一区bb| 香蕉久久一区二区不卡无毒影院| 先锋亚洲精品| 久久久久久电影| 欧美承认网站| 欧美日韩一级片在线观看| 国产精品毛片一区二区三区| 国产欧美激情| 在线观看视频一区| 日韩视频精品在线观看| 亚洲自拍偷拍福利| 久久精品日韩| 欧美激情一区三区| 亚洲美女黄色片| 亚洲欧美日产图| 久久久久久久久久久久久女国产乱| 久久网站免费| 欧美日韩在线不卡一区| 国产精品一区二区久久久久| 一区二区三区在线视频免费观看 | 国产精品福利av| 国产一区二区三区日韩| 亚洲精品日韩精品| 亚洲欧美在线一区二区| 老牛影视一区二区三区| 99国产精品久久| 欧美一级视频精品观看| 欧美成人午夜影院| 国产欧美日韩三级| 亚洲精品一区二区三区av| 亚洲欧美日韩综合aⅴ视频| 久久亚洲一区二区| 一本不卡影院| 老司机午夜精品视频| 国产精品成人一区二区网站软件| 狠狠入ady亚洲精品| 一区二区三区.www| 久久亚洲春色中文字幕| 一区二区三区av| 久久综合久色欧美综合狠狠| 国产精品va在线播放我和闺蜜| 在线成人h网| 欧美一级一区| 亚洲精品乱码久久久久久蜜桃麻豆 | 国产一区二区三区不卡在线观看| 日韩午夜在线电影| 久久综合狠狠综合久久综合88 | 亚洲男人的天堂在线| 欧美福利在线观看| 韩国一区二区三区美女美女秀| 亚洲性感激情| 亚洲欧洲精品成人久久奇米网| 午夜国产精品视频| 欧美午夜一区二区| 亚洲精品久久久久久下一站| 久久久91精品国产一区二区三区 | 亚洲一区二区在线看| 欧美激情一区二区在线| 尤物99国产成人精品视频| 欧美一区午夜精品| 一本色道婷婷久久欧美| 欧美激情精品久久久六区热门| 黄色小说综合网站| 欧美在线首页| 亚洲综合色激情五月| 国产精品大片| 亚洲一区二区精品| 亚洲人成在线观看一区二区 | 狠狠色丁香久久婷婷综合_中| 亚洲欧美日本国产专区一区| 亚洲三级电影在线观看| 欧美成人免费全部| 亚洲激情偷拍| 欧美成人伊人久久综合网| 久久久国产午夜精品| 伊大人香蕉综合8在线视| 久久看片网站| 久久精品国产免费观看| 国产综合在线视频| 久久青草久久| 久久久精品日韩欧美| 影音先锋久久| 欧美成人国产| 欧美高清视频一区| 一区二区欧美激情| aa级大片欧美| 国产精品美女久久福利网站| 亚洲欧美在线一区| 性亚洲最疯狂xxxx高清| 国产在线视频欧美一区二区三区| 久久精品国产亚洲高清剧情介绍| 亚洲免费中文| 国产一区二区成人久久免费影院| 久久精品综合网| 久久久精品国产一区二区三区| 在线高清一区| 亚洲国产福利在线| 欧美亚日韩国产aⅴ精品中极品| 亚洲欧美日韩在线高清直播| 亚洲欧美中文字幕| 在线不卡视频| 亚洲破处大片| 国产精品视频福利| 久久人人97超碰国产公开结果| 美女91精品| 亚洲一区二区三区在线看| 午夜精品国产精品大乳美女| 伊人久久大香线| 亚洲伦理自拍| 国产色综合天天综合网| 欧美二区在线观看| 欧美日韩色婷婷| 久久久精品国产免大香伊| 久久天天狠狠| 亚洲淫片在线视频| 久久精品夜色噜噜亚洲a∨ | 午夜精品亚洲一区二区三区嫩草| 国内外成人免费激情在线视频网站| 欧美大片一区| 国产精品久久久久秋霞鲁丝| 老鸭窝毛片一区二区三区| 欧美日韩国产不卡|