超级玛丽制作揭秘3 游戏背景类MYBKSKY
来源:互联网 发布:后台cms内容管理系统 编辑:程序博客网 时间:2024/05/17 06:05
类说明:这是一个专门处理游戏背景的类。在横版游戏或射击游戏中,都有一个背景画面,如山、天空、云、星空等等。这些图片一般只有1到2倍屏幕宽度,然后像一个卷轴一样循环移动,连成一片,感觉上像一张很长的图片。这个类就是专门处理这个背景的。在超级玛丽增强版中,主要关卡是3关,各有一张背景图片;从水管进去,有两关,都用一张全黑图片。共四张图。这四张图大小一致,纵向排列在一个位图文件中。MYBKSKY这个类,派生于MYBITMAP。由于背景图片只需要完成循环移动的效果,只需要实现一个功能,而无需关心其他任何问题(例如句柄、dc)。编码起来很简单,再次反映出面向对象的好处。
技术原理:
怎样让一张图片像卷轴一样不停移动呢?很简单,假设有一条垂直分割线,把图片分成左右两部分。先显示右边部分,再把左边部分接到图片末尾。不停移动向右移动分割线,图片就会循环地显示。
成员函数功能列表:
class MYBKSKY:public MYBITMAP
{
public:
MYBKSKY();
~MYBKSKY();
//show
//功能 显示一个背景.
//入参 无
void DrawRoll(); //循环补空
//功能 显示一个背景,并缩放图片
//入参 横纵方向缩放比例
void DrawRollStretch(int x,int y);
//功能 指定显示某一个背景,并缩放图片,游戏中用的就是这个函数
//入参 横纵方向缩放比例 背景图片ID(纵向第几个)
void DrawRollStretch(int x,int y,int id);
//功能 设置图片位置
//入参 新的横纵坐标
void MoveTo(int x,int y);
//功能 循环移动分割线
//入参 分割线移动的距离
void MoveRoll(int x);
//data
//分割线横坐标
int xseparate;
};
函数具体实现都很简单,例如:
void MYBKSKY::DrawRollStretch(int x,int y, int id)
{
//选入句柄
SelectObject(hdcsrc,hBm);
//将分割线右边部分显示在当前位置
StretchBlt(hdcdest,
xpos,ypos, //当前位置
(width-xseparate)*x,height*y, //缩放比例
hdcsrc,
xseparate,id*height, //右边部分的坐标
width-xseparate,height, //右边部分的宽高
SRCCOPY);
//将分割线左边部分接在图片末尾
StretchBlt(hdcdest,xpos+(width-xseparate)*x,ypos,
xseparate*x,height*y,
hdcsrc,0,id*height,
xseparate,height,
SRCCOPY);
}
使用举例:
定义 MYBKSKY bmSky;
初始化
mario01/mario01.cpp(234): bmSky.Init(hInstance,IDB_BITMAP_MAP_SKY,1,4);
mario01/mario01.cpp(235): bmSky.SetDevice(hscreen,hmem,GAMEW*32*MAX_PAGE,GAMEH*32);
mario01/mario01.cpp(236): bmSky.SetPos(BM_USER,0,0);
游戏过程中显示
mario01/mario01.cpp(366): bmSky.DrawRollStretch(2,2,gamemap.mapinfo.iBackBmp);
每隔一定时间,移动分割线
mario01/mario01.cpp(428): bmSky.MoveRoll(SKY_SPEED);//云彩移动
以下两处与玩家角色有关:
当玩家切换到一张新地图时,刷新背景图片的坐标
mario01/gamemap.cpp(314): bmSky.SetPos(BM_USER,viewx,0);
当玩家向右移动时,刷新背景图片的坐标
mario01/gamemap.cpp(473): bmSky.SetPos(BM_USER,viewx,0);
至此,游戏背景图片的功能就做完了。
附:
超级玛丽第一版源码链接:http://download.csdn.net/source/497676
超级玛丽增强版源码链接:http://download.csdn.net/source/584350
- 超级玛丽制作揭秘3 游戏背景类MYBKSKY
- 超级玛丽制作揭秘18背景物品
- 超级玛丽制作揭秘21游戏数据管理
- 超级玛丽制作揭秘1
- 超级玛丽制作揭秘2
- 超级玛丽制作揭秘4图片显示 类MYANIOBJ
- 超级玛丽制作揭秘5魔法攻击 类MYANIMAGIC
- 超级玛丽制作揭秘6时钟控制 类MYCLOCK
- 超级玛丽制作揭秘7字体管理 类MYFONT
- 超级玛丽制作揭秘8跟踪打印 类FILEREPORT
- 超级玛丽制作揭秘22玩家角色类MYROLE
- 超级玛丽制作揭秘25类GAMEMAP 全局变量
- 超级玛丽制作揭秘17地图物品
- 超级玛丽制作揭秘19视图
- 超级玛丽制作揭秘20地图切换
- 超级玛丽制作揭秘24角色动画
- 超级玛丽制作揭秘文档发布
- 超级玛丽制作揭秘9精灵结构struct ROLE
- EXCEL中如何根据某列找到重复的行,并将重复只保留一条其余的删除?
- 真心交朋友
- 点阵字库
- IBM版西游记:)
- VC6【MFC】代码累积(一)
- 超级玛丽制作揭秘3 游戏背景类MYBKSKY
- 地球仪
- VC6【MFC】代码累积(二)窗体透明
- 前途
- 一个通用的绑定UltraWebTree树结构
- 中国的送礼秘诀
- 第一篇
- Making Things Move! 中文版
- 命令行编译连接VC程序