超级玛丽制作揭秘5魔法攻击 类MYANIMAGIC

来源:互联网 发布:启动和关闭mysql 编辑:程序博客网 时间:2024/05/01 17:46

 类说明:玩家有两种攻击方式:普通攻击(子弹),魔法攻击(旋风)。这个类是专门处理旋风的。我最初的想法是用一些特殊的bitblt方法制造特效,例如或、与、异或。试了几次,都失败了。最后只能用“先与后或”的老方法。这个类可看成MYANIOBJ的一个简化版,只支持不规则图片的显示。

成员函数功能列表:
class MYANIMAGIC:public MYBITMAP
{
public:
 MYANIMAGIC();
 ~MYANIMAGIC();

 //init list
 //功能 初始化宽度数组 高度数组 纵坐标数组(必须有黑白图)
 //入参 宽度数组地址 高度数组地址 图片数量
 //(图片纵坐标信息由函数计算得出)
 void InitAniList(int *pw,int *ph,int inum);
 //功能 设置dc
 //入参 显示dc 临时dc(用于图片句柄选择) 临时dc(用于特效实现)
 void SetDevice(HDC hdest,HDC hsrc,HDC htemp);

 //show
 //功能 显示某个图片的某帧
 //入参 横纵坐标(显示位置) 图片id(纵向第几个) 帧(横向第几个)
 void DrawItem(int x,int y,int id,int iframe);

 //宽度数组
 int wlist[20];
 //高度数组
 int hlist[20];
 //纵坐标数组
 int ylist[20];

 //用于特效的临时dc, 功能没有实现?
 HDC hdctemp;
};
函数具体实现很简单, 可参照MYANIOBJ类.

使用举例
定义
mario01/mario01.cpp(87):MYANIMAGIC bmMagic;
初始化加载位图
mario01/mario01.cpp(250): bmMagic.Init(hInstance,IDB_BITMAP_MAGIC,1,1);
设置dc
mario01/mario01.cpp(251): bmMagic.SetDevice(hscreen,hmem, hmem2);
初始化宽高信息
mario01/mario01.cpp(252): bmMagic.InitAniList(mapanimagic[0],mapanimagic[1],sizeof(mapanimagic[0])/sizeof(int));

变量声明
gamemap.cpp(22):extern MYANIMAGIC bmMagic;
在逻辑层中, 显示旋风图片
mario01/gamemap.cpp(568):    bmMagic.DrawItem(xstart,ystart, 0, FireArray[i].iframe);

附:
超级玛丽第一版源码链接:http://download.csdn.net/source/497676
超级玛丽增强版源码链接:http://download.csdn.net/source/584350