金桥科普  
设为首页 关于我们 邮箱登录
科普聚焦时代科技科普生活科学技术自然科学航空航天科技博览历史考古电脑IT
您现在的位置: 首页 >> 科普频道 >> 电脑游戏 >> 文章详情
斜45度游戏开发(提高篇)

Flysky 2006 gameres 2006-08-22
斜45度游戏开发(提高篇)
作者:Flysky 2006

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

  好,那我们开始吧。

方法一(对前面的那篇文章的改进)

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

typedef struct st_mapunit{

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

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

vector <st_mapunit> mapunits;

声明两个宏:

#define MAGIC_NPC 0x0001
#define MAGIC_THING 0x0002

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

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

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


方法二

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

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

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

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

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

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

  最后一个结构:

struct hlayer_object{
    hlayer_object *next;
    DWORD x,y;        /* 这个物件的X/Y值 */
    int 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度教程。

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

-----以下内容请保留-----
这篇文章的完成版本:http://www.pp28.com.ru/blog/article.asp?id=16


资讯仅供参考,不代表本站(GameRes.com)观点,此信息由sea_bug提交。 

发布日期:2006-2-23 9:53:00

  发表评论 写信给编辑 关闭窗口
同栏目内容
· 瑞典在网游中开设虚拟大使馆 2007-06-06
· 魔兽争霸3秘籍(魔兽无敌秘籍) 2007-03-28
· 优化64K色Alpha混合算法 2006-08-15
· 游戏基础 —点阵汉字显示 2006-08-15
· 游戏基础——深入WINDOW字型 2006-08-15
· SDL系列教程:SDL和IME 2006-08-14
相关内容
近期主推
西藏发现青藏高原最大冰川群
·西藏发现青藏高原最大冰川群
·中日: "月亮女神"携手"嫦娥"
·行星大碰撞砸死恐龙催生人类
·美研制会飞汽车定价9万美元
·美国教授设计出自适应机器人
·银河系可能有20多个黑洞
近期热门
英海域惊现大龙虾为普通龙虾5倍
·英海域惊现大龙虾为普通龙虾5倍
·新物种金蛙体表有剧毒
·我国嫦娥工程计划测量月球
·精神病药物可治多种癌症
·视觉震撼:来自海底的精灵
·能删除不良记忆的药物诞生
近期焦点
广西发现罕见溶洞钟乳石有30万年
·广西发现罕见溶洞钟乳石有30万年
·澳大利亚惊现“卡布基诺”海滩
·美国"彩色"瀑布夜幕下震撼游人
·地球上究竟有多少个物种
·英国探险家北极游泳破纪录
·世界之最 世上最小的动物
金桥科普是一个公益性栏目,内容由作者提供或摘自互联网,其目的是向广大网民普及科学技术知识。如果您发现本网站转载或摘编了您拥有著作权的作品,请通知我们(电话:023-63659911),我们立即删除。
关于我们 | 网站地图 | 用户注册 | 广告客户 | 招聘信息 | 业务信息
Copyright@2006-2009 JQInfo.com,WONDER. All Rights Reserved
重庆科技咨询中心.重庆网得信息技术有限公司.版权所有
Email:webmaster@jqinfo.com
重庆数据通信局提供网络带宽. 渝ICP备05002327号