类说明:玩家有两种攻击方式:普通攻击(子弹),魔法攻击(旋风)。这个类是专门处理旋风的。我最初的想法是用一些特殊的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