45度斜三通:斜45度游戏开发( 2)



 上篇我们讲了地图结构和地图基本绘制这个属于较简单步骤我做这些也不是特别麻烦如果你是老手那么1天对你来说已经足够我们这组文章也没有讲任何优化窍门技巧如果你想优化还是需要在实际中摸索当然我有时间也会写

  这篇我们主要研讨地图物品、景物、NPC建立,并说下遮挡简单实现思路方法

NPC\\主角结构:
  主角和NPC在起比较好也便于管理(再次声明:作者已经不使用这些思路方法这些思路方法只适用于初学者!),结构如下:

struct stRoleC
{
    //判断
    bool IsNPC;  //是不是NPC

    //----------Role基本--------------
    char *Name;     //NPC名字
    bool VS;  //是否有这个人物(是否可见)
     x,y; //人物XY坐标值
    RECT roler; //人物矩形
     face;        //NPC面向方向 0. 下 1. 上  2.左  3.右
    char *facePic;

    //----------属性值-------------
     HP,MP; //目前HP,MP
     MaxHP,MaxMP; //满HP和MP
     Level; //目前等级
     Exp; //目前经验
     MaxExp; //满血经验

    //----------寻路相关--------------
    bool move;
     movex,movey; //移动目标点

    //----------NPC相关---------------
    char *EScrFName;    //当触发人民脚本文件名
};

struct stRole
{
    //判断
    bool IsNPC;  //是不是NPC

    //----------Role基本--------------
    char Name[32];     //NPC名字
    bool VS;  //是否有这个人物(是否可见)
     x,y; //人物XY坐标值
     oldx,oldy; //人物上XY值
    RECT roler; //人物矩形
    POINT PicS; //距像素坐标偏移
     face;        //NPC面向方向 0. 下 1. 上  2.左  3.右
    bool facejd; //上站向
    char facePic[64];
     facej;       //NPC方向脚步 0 1 2 3
    vector<POINT> zd; //遮挡列表

    //----------属性值-------------
     HP,MP; //目前HP,MP
     MaxHP,MaxMP; //满HP和MP
     Level; //目前等级
     Exp; //目前经验
     MaxExp; //满血经验

    //----------寻路相关--------------
    bool move;
    vector<POINT> Path; //各个步数
     PathSteps; //步数
     PathCSteps; //已经走过步数
     movex,movey; //移动目标点

    //----------NPC相关---------------
    char *EScrFName;    //当触发人民脚本文件名
    bool WalkLoop;  //是向前走还是倒退

    //----------Surface--------------
    LPDIRECTDRAWSURFACE7 lpDDS_ROLEP; //Role图片
    LPDIRECTDRAWSURFACE7 lpDDS_ROLEL; //Rolelogo
};

  这两个结构其中stRole是内部储存结构而stRoleC是对外接口其实你完全不必那样个也可以具体完全随你便

  注意:以下代码和KGameSrc点关系也没有

景物建立:

struct st_scene
{
     x,y; //房子等东西右下角坐标
     Width,Height; //物品大小利用这个可以选出房子等左上角坐标
    LPDIRECTDRAWSURFACE7 lpDDS_SCENEPIC; //房子等图片
    unsigned  b_isablock; //0: 不阻碍 1: 全部阻碍 2:使用阻碍表
    struct {unsigned  data;}**v_block; //阻碍表,比如房子,门那里是不遮挡
    //注意:我们构件是<<魔力宝贝>>式所以陷阱并不是归这里
};

  我也注释了应该很好看吧

  遮挡问题:

  这个确实比较棘手如果是单格遮挡可以看云风遮挡算法可我们是多个格如何办呢?

  根据几位前辈讨论他们想出了使用X+Y算法(画家算法)但当时不是很成功我就做下补充

  首先,把地图上切东西(不管是物品还是主角)串成个链表(遮挡链表)然后根据X+Y值有小到大(左上到右下)排列最后绘制这样就完成了很简单吧(哪位可以帮我画下图,感激不尽.)

  优化思路方法也有:那就是这个景物排列让地图编辑器排列然后这个不动了光人物在链表中位置移动这样就完成了快速遮挡




  好了基本东西我也写完了由于现在我在做操作系统语言说太急次我会把更好优化代码和例子给大家谢谢大家观看! 

Tags:  45度网络 45度弯头 倾斜45度 45度斜三通

延伸阅读

最新评论

发表评论