45度斜三通:斜45度游戏开发(提高篇)



作者:Flysky 2006

  这篇文章我们主要讲是遮挡详细制作思路方法,我认为,如果你知道了上面几篇原理,应该也能制作出来,如果你制作出来了,就请不要往下看了下面很可能对你来说是浪费时间

  好,那我们开始吧

思路方法(对前面那篇文章改进)

首先我们要学会union使用,看下面结构:

typedef struct st_mapunit{

    BYTE b_magic;                    /*魔法数字*/
     x,y;                                     /* 这个图片右下角坐标 */
     width,height;                   /* 长度,宽度 */
    LPDIRECTDRAWSURFACE7 pic;
    union{
        st_npc npc;            /* NPC结构 */
        st_things thing;     /* 景物结构 */
    }u; 
};

  然后我们需要个类这个类包括NPC类、景物、显示类,还有个可变大小,我们可以使用vector类组织这个(或用链表):

vector <st_mapunit> mapunits;

声明两个宏:

# MAGIC_NPC 0x0001
# MAGIC_THING 0x0002

  这样我们就可以对他们进行排序了,思路方法也很简单,在KGame V1.0NPC里面出现过,我认为人物插入思路方法很好,但排序算法不是很好,你需要选择更好思路方法

  注意:KGameV1.0当时没选用这个思路方法原因是当时已经写了许多代码了

  大家应该知道如何做了吧,大类负责提供接口,小类当然是执行各个工作了......


思路方法 2

  其实这个我也没有试过但我认为是可行但速度可能比上面些(但不多),但这样设计更符合面向对象思路方法

1.分层类建立
  这个我们需要链表,先看高级页面类:

 hsurface{
    hlayer *hlayer_headle;            /* 层次列表头 */
    void addsurface(DWORD x,DWORD y, layer,LPDIRECTDRAWSURFACE7 surface);    /* 添加个物件 */
    LPDIRECTDRAWSURFACE7 delsurface( x, y, layer);                /* 删除个物件 */
    void clearhlayer( layer);                        /* 清除个层所有物件 */
    void clearall;                                /* 清除所有东西 */
    void draw( layer,LPDIRECTDRAWSURFACE7 surface);            /* 将个层绘到页面上 */
    void draw(LPDIRECTDRAWSURFACE7 surface);                /* 所有层绘到页面上 */
};

  现在应该有初步认识了吧,如果你知道了原理,就不要往下看了(耽误时间)

struct hlayer{                /* 个层结构 */
    hlayer *next;            /* 下个层指针 */
     i_layer;            /* 这个层索引值 */
    hlayer_object *object_headle;    /* 这个层物件头 */
};

  上面这个是个层结构,层和层的间是成个链关系,我们又加上了i_layer这个值,这样我们就可以让两个层的间值不连续,最后个便是物件指针头,我们利用这个进行绘图

  最后个结构:

struct hlayer_object{
    hlayer_object *next;
    DWORD x,y;        /* 这个物件X/Y值 */
     i_layer;        /* 这里大家可能有疑问,上面不时有了吗,这个是个验证值,验证这个物件正确性 */
    LPDIRECTDRAWSURFACE7 surface;    /* 这个页面 */
};

  这样我们就介绍说明完了,有几点注意地方:

  (1)X/Y值要按照90度坐标,而不是针对45度坐标,这样更有普遍性.(如果你觉得这样就不能遮挡了,那么你再看遍上面思路方法

  (2)我喜欢实现个内存池,这样建立会更快

2.将分层类运用到45度游戏中

  i_layer=0 我们保留

  每个东西:i_layer=x+y+1

  云彩:i_layer=MAX_X+MAX_Y+1(注意,这个X+Y只是个值,表明按顺序绘图,具体请看我45度教程

  什么东西最重要还是看自己,我只是引了个路,剩下好办法还是你自己去挖掘(其实也不难)!!!!



-----以下内容请保留-----
这篇文章完成版本: border=0>http://www.pp28.com.ru/blog/article.asp?id=16
Tags:  45度网络 45度弯头 倾斜45度 45度斜三通

延伸阅读

最新评论

发表评论