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

天行健 君子當(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>
            亚洲成色www久久网站| 一区二区三区在线观看欧美| 亚洲黄色成人| 久久国产精品毛片| 亚洲裸体俱乐部裸体舞表演av| 久久国内精品自在自线400部| 欧美三级网页| 亚洲人精品午夜| 久久精品视频在线| 亚洲伊人久久综合| 欧美天天在线| 一区二区三区精品视频| 亚洲国产精品福利| 欧美中文字幕在线视频| 国产欧美 在线欧美| 亚洲图片欧美一区| 亚洲乱码久久| 欧美日韩精品免费观看视一区二区| 亚洲黄色一区二区三区| 免费不卡欧美自拍视频| 欧美在线视频免费观看| 国产欧美二区| 欧美一区影院| 亚洲欧美制服中文字幕| 国产老肥熟一区二区三区| 亚洲综合首页| 亚洲特级毛片| 国产精品mm| 亚洲免费视频成人| 亚洲特色特黄| 国产精品美女www爽爽爽| 亚洲男女自偷自拍图片另类| 一二美女精品欧洲| 国产精品第2页| 香港久久久电影| 亚洲欧美视频在线| 国产在线不卡| 老司机成人在线视频| 久久久久久久久岛国免费| 精品不卡一区| 欧美jizz19性欧美| 牛牛影视久久网| 亚洲另类黄色| 日韩视频在线一区| 欧美午夜免费电影| 亚洲欧美日本国产专区一区| 亚洲一区在线视频| 国内精品国语自产拍在线观看| 久久免费一区| 免费不卡在线视频| 99精品久久| 亚洲婷婷综合久久一本伊一区| 国产精品推荐精品| 久久久成人网| 免费高清在线视频一区·| 亚洲美女精品久久| 一区二区三区高清| 国产一区二区三区观看 | 午夜精品亚洲一区二区三区嫩草| 国产欧美日韩一区二区三区在线| 久久久久网址| 欧美成在线视频| 一区二区三区视频在线看| 亚洲一区三区电影在线观看| 国产三区精品| 亚洲国产mv| 国产精品美女久久久久av超清 | 亚洲一区欧美二区| 狠狠操狠狠色综合网| 亚洲二区在线观看| 欧美性天天影院| 久久精品国产久精国产一老狼 | 国产主播精品| 亚洲高清网站| 国产精品网站在线观看| 欧美成ee人免费视频| 欧美日韩亚洲一区二| 久久精品一区二区三区中文字幕| 美日韩在线观看| 亚洲欧美不卡| 久久青青草综合| 亚洲无毛电影| 久久久亚洲午夜电影| 亚洲免费观看在线观看| 亚洲欧美视频一区二区三区| 亚洲欧洲日产国产网站| 亚洲欧美激情一区| 亚洲片在线观看| 亚洲欧美国产日韩天堂区| 亚洲人成网站色ww在线| 亚洲一区二区三区成人在线视频精品| 在线免费高清一区二区三区| 日韩午夜电影av| 在线观看精品视频| 在线中文字幕不卡| 亚洲国产视频直播| 亚洲欧美日本国产有色| 亚洲精品国产品国语在线app| 亚洲欧洲99久久| 夜夜嗨av一区二区三区网站四季av| 欧美影院成人| 亚洲天堂av综合网| 免费欧美视频| 久久久久久久久蜜桃| 欧美日韩在线电影| 欧美国产一区视频在线观看| 国产精品一页| 夜夜嗨av一区二区三区| 亚洲国产欧洲综合997久久| 羞羞色国产精品| 亚洲精选在线| 久久尤物视频| 欧美伊久线香蕉线新在线| 欧美日韩免费观看一区三区| 欧美88av| 狠狠入ady亚洲精品经典电影| 亚洲午夜久久久| av成人黄色| 免费国产自线拍一欧美视频| 久久在线视频| 国产欧美在线播放| 一区二区三区欧美亚洲| 亚洲精品国精品久久99热一| 久久久亚洲午夜电影| 久久久噜噜噜久久| 国产精品综合久久久| 一区二区高清视频| 一区二区三区精品国产| 欧美黄色日本| 欧美激情精品久久久久久变态 | 亚洲欧美资源在线| 欧美日韩在线免费视频| 亚洲国产一区二区三区高清| 亚洲第一中文字幕在线观看| 久久精品观看| 久久久欧美精品sm网站| 国产日韩精品久久久| 亚洲女人小视频在线观看| 亚洲欧美国产不卡| 欧美午夜精品久久久久久超碰| 亚洲精品社区| 一本久道久久综合狠狠爱| 欧美激情精品久久久| 亚洲国产天堂久久综合| 91久久久亚洲精品| 美女精品国产| 亚洲高清网站| 99re在线精品| 欧美日韩免费精品| 99re6这里只有精品视频在线观看| 夜夜嗨av一区二区三区免费区| 欧美激情在线狂野欧美精品| 最新热久久免费视频| 夜夜精品视频| 欧美视频网站| 亚洲小视频在线| 欧美伊人精品成人久久综合97 | 亚洲日韩欧美一区二区在线| 亚洲每日在线| 欧美日韩播放| 亚洲视频视频在线| 欧美一区二区三区在线视频| 国产亚洲激情| 久久精品国产精品亚洲| 免费的成人av| 亚洲日韩欧美视频一区| 欧美日韩国产区一| 亚洲一级在线| 久久免费黄色| 亚洲国产一区在线| 欧美日韩免费观看一区=区三区| 一本色道久久综合狠狠躁篇的优点 | 99精品久久| 国产精品乱码人人做人人爱| 午夜宅男欧美| 欧美xart系列高清| 99精品热6080yy久久| 国产精品久久久久aaaa樱花| 午夜亚洲福利| 欧美国产综合一区二区| 一区二区三区欧美在线| 国产精品视频久久一区| 久久aⅴ国产紧身牛仔裤| 欧美国产三级| 在线中文字幕日韩| 国产欧美日韩一区二区三区在线| 久久久久久电影| 亚洲精品一区二区三区四区高清| 午夜精品av| 在线观看日韩国产| 欧美日韩天天操| 欧美在线观看一二区| 亚洲黄色三级| 欧美一区二区三区在线| 亚洲高清影视| 国产精品乱人伦一区二区 | 国产欧美 在线欧美| 免费国产一区二区| 亚洲自拍偷拍福利| 欧美aa在线视频|