howzyao 发表于 2022-9-28 02:04:45

用easyX做了一下动画图大家来交流





howzyao 发表于 2022-9-28 02:05:49

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]
查看完整版本: 用easyX做了一下动画图大家来交流