登录社区:用户名: 密码: 忘记密码 网页功能:加入收藏 设为首页 网站搜索  

文档

下载

图书

论坛

安全

源码

硬件

游戏
首页 信息 空间 VB VC Delphi Java Flash 补丁 控件 安全 黑客 电子书 笔记本 手机 MP3 杀毒 QQ群 产品库 分类信息 编程网站
  立华软件园 - 安全技术中心 - 技术文档 - 入门基础 技术文章 | 相关下载 | 电子图书 | 攻防录像 | 安全网站 | 在线论坛 | QQ群组 | 搜索   
 安全技术技术文档
  · 安全配制
  · 工具介绍
  · 黑客教学
  · 防火墙
  · 漏洞分析
  · 破解专题
  · 黑客编程
  · 入侵检测
 安全技术工具下载
  · 扫描工具
  · 攻击程序
  · 后门木马
  · 拒绝服务
  · 口令破解
  · 代理程序
  · 防火墙
  · 加密解密
  · 入侵检测
  · 攻防演示
 安全技术论坛
  · 安全配制
  · 工具介绍
  · 防火墙
  · 黑客入侵
  · 漏洞检测
  · 破解方法
 其他安全技术资源
  · 攻防演示动画
  · 电子图书
  · QQ群组讨论区
  · 其他网站资源
最新招聘信息

斜45度游戏开发(二)
发表日期:2007-03-28作者:[转贴] 出处:  

 作者:Flysky 2005

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

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

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

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

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

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

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

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

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

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

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

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

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

    //----------Surface--------------
    LPDIRECTDRAWSURFACE7 lpDDS_ROLEP; //Role的图片
    LPDIRECTDRAWSURFACE7 lpDDS_ROLEL; //Role的logo
};

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

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

景物的建立:

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

  我也注释了,应该很好看吧。

  遮挡问题:

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

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

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

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


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

我来说两句】 【发送给朋友】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 斜45度游戏开发(二)

 ■ [欢迎对本文发表评论]
用  户:  匿名发出:
您要为您所发的言论的后果负责,故请各位遵纪守法并注意语言文明。

最新招聘信息

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放 / 友情链接  
Copyright ©2001-2006 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.00203