|
楼主 |
发表于 2022-10-20 21:20:42
|
显示全部楼层
原理如下:
使用一个坐标类,来控制所有图形向buf的刷写
class e
{
int len;
int *x,*y,*state,*mx,*my;
public:
e();
~e();
e(int);
void putpng(IMAGE&,IMAGE&);
void set_statu(int,int);
void set_xy(int,int,int);
int get_len();
int get_state();
void paddle_move(IMAGE&);
void block_stage(int);
};
//创建 1个背景,16个球,60个块和1个拍子 (实际上这个数量无关绘图对像IMAGE的数量,只是想在哪里putimage就指定坐标,
摆放即可,easyx教程都有,这里做个抛砖引玉了.
e bg(1);
e ball(16);
e block(60);
e paddle(1);
图形库,用的是easyx的两个头文件和一个库文件,官网上有,就不发了.
所有图形:abcd
这是文件中对应的4个png图及其防止黑边的mask图,利用了direct.h使用了相对路径,
再也不会出现前几次的黑屏失误了.
IMAGE a, b, c, d;
IMAGE amask, bmask, cmask, dmask;
void loadimg()
{
loadimage(&amask,"./res/bg00.png");
loadimage(&a,"./res/bg01.png");
loadimage(&bmask,"./res/ball00.png");
loadimage(&b,"./res/ball01.png");
loadimage(&cmask,"./res/block00.png");
loadimage(&c,"./res/block01.png");
loadimage(&dmask,"./res/paddle00.png");
loadimage(&d,"./res/paddle01.png");
}
//把流程做了到了一起,读图到内存,对像设置状态,及一个个地初始化好位置,直接把块设置到第6关(6排)
void init()
{
loadimg();
bg.set_statu(0,1);
init_paddle();
init_ball();
block.block_stage(6);
}
刷新的话,直接把IMAGE对像作为参数使用类中的方法即可 (类中方法基本上都是for)
void update()
{
bg.putpng(amask,a);
ball.putpng(bmask,b);
block.putpng(cmask,c);
paddle.putpng(dmask,d);
}
//主函数很少,就是设置好鼠标(不跑出图形窗口和标题) 开始绘图,进入whie后 getmsg() 作返回及控制拍子移动和将来的打子弹
int main()
{
set_cursor_title();
init();
BeginBatchDraw();
while(getmsg())
{
update();
FlushBatchDraw();
Sleep(20);
}
over();
return 0;
}
//类的构造和析构和指定个数构造也很简单:
e:: e():len(0),x(NULL),y(NULL),state(NULL),mx(NULL),my(NULL)
{}
e:: ~e()
{
delete [] x;
delete [] y;
delete [] state;
delete [] mx;
delete [] my;
}
e:: e(int n):len(n)
{
x=new int[len];
y=new int[len];
state=new int[len];
mx=new int[len];
my=new int[len];
for(int i=0;i<len;i++)
{
x[i]=0;
y[i]=0;
state[i]=0;
mx[i]=0;
my[i]=0;
}
}
//所有对像的移动,就是靠它:
void e:: putpng(IMAGE&mask,IMAGE&own)
{
for(int i=0;i<len;i++)
{
if(state[i]>0)
{
x[i] += mx[i];
y[i] += my[i];
putimage(x[i],y[i],&mask,SRCAND);
putimage(x[i],y[i],&own,SRCPAINT);
}
}
}
其它的,也都是想一些,写一些的.这个效果真还行,不像原始graphics.h卡卡地,很流畅.
最后附一个早前写的原始graphics.h的较完整的已上传到坛里了,和这个easyx版本的无可比性
|
|