用easyX做了一下动画图大家来交流
main.cpp
/*
本项目日志
...
*/
/* 需要的头文件 */
#include "e.h"
/* 全局变量 */
#define WIN_WIDTH640 //大型程序里应当避免这种做法,中小型程序则无妨
#define WIN_HEIGHT 480
#define Bg_num 3
/* 用户输入 */
ExMessage input; //暂未实现 消息机制 学习中
/* 从硬盘读取图形文件 save in the IMAGE */
IMAGE bg;// 背景Bg_num个 活动物actor_num个
/* 图形的座标变量 use on the IMAGE */
//用于控制 背景的移动 最远的应不移动的最慢,近一层的应当快点 最近的应当最快
int bgx; //x轴 几个背景就几个x轴 向右移动 造成错落层次的感觉
//渲染 项目背景
void updateBg()
{
putimage(bgx,0,&bg); //背景不移动 全黑图1200*1000 底色不能动
putimage(bgx,168,&bg); //小树
putimage(bgx,300,&bg); //小山
//bgx +=1;
//bgx +=2;
}
//消息机制 未实现 学习中
void event_pressed(int &x)
{
//x=0;
}
/* 图像信息统计 */
void Title()
{
char titlea[]="000000000000";
char titleb[]="111111111111";
char titlec[]="the mddle is here";
outtextxy(100,10,titlea);
outtextxy( getmaxx() -101-textwidth(titleb) ,10,titleb);
outtextxy( getmaxx()/2 -textwidth(titlec)/2 ,10,titlec);
/*
非渲染
文字不是IMAGE对像,需要考虑绘图时消除文字的问题
或者把文件存入到IMAGE对像统一绘制
或者使用ito等int型转换char的函数实现每次循环渲染到buff
*/
}
//初始化 背景 后面用 结构e 代替 init()中的 加载背景等函数
void init()
{
initgraph(WIN_WIDTH,WIN_HEIGHT); //第3个参数默认0 控制台开关 flag=0关 flag=1不关
//输出界面文字
Title();
char name; //文件名变最需要用来读取硬盘上的图片文件
//加载背景
for(int i=0;i<Bg_num; i++)
{
sprintf(name,"F:\\e01\\res\\bg%03d.png",i+5);
loadimage(&bg,name);
bgx=0;
}
printf("初始化完成");
}
int main(int argc, char** argv) {
init();
PlaySound(TEXT("F:\\e01\\sound\\backgroudMusic.wav"),NULL,SND_ASYNC);
e qq; //创建空对像 用来集中批量地控制图像
qq.get_num_name(5,"F:\\e01\\res\\qq.png"); //10个qq载入IMAGE == init()
for(int i=0;i<5;i++)
{
qq.set_statu(i,0); //都设为1状态 == 各种动作 0 不动
qq.set_stay(i,10+i*78,10); //都设为停留在不同的位置
}
e ball;
ball.get_num_name(10, "F:\\e01\\res\\gg03.png" );
for(int i=0;i<10;i++)
{
ball.set_statu(i,1); //为下雪作准备
ball.set_stay(i,10+i*80,10); //雪的密度
ball.set_addx(i,0);
ball.set_addy(i,5); //下雪动作
}
int on=1;
while(on)
{
event_pressed(on); //输入 对画面实现控制 人机交互
BeginBatchDraw(); //批量绘图,开始缓存 下面所有行 绘制但不显示
updateBg(); //图层底 0+x层 写入
FlushBatchDraw(305,305,310,310); //图层底 所有行,显示出来
qq.draw_buff(); //图层中 0+x-1写入
FlushBatchDraw(305,305,310,310); //图层中,显示出来
ball.draw_buff(); //图层上 最后刷新出来的图为0层
EndBatchDraw(); //批量绘图结束 显示0层
Sleep(100);//0.1秒休眠 提高本项目运行在windows的性能
//最后 需,一次下来,显示了3次要按素材设计规划显示的合理性
}
system("pause");
closegraph();
return 0;
}
页:
[1]