🎆音乐分享
SetWorkingImage :设置工作区
SetWorkingImage(&bigimg);
SetWorkingImage(NULL);//回到默认工作区
如果需要对某个 IMAGE 做绘图操作,可以通过该函数将其设置为当前的绘图设备,之后所有的绘图语句都会绘制在该 IMAGE 上面。
简而言之,就是设置某一个特定的区域来进行绘图
比如下面的代码就把图片作为一个工作区
将参数置为 NULL 可恢复对默认绘图窗口的绘图操作。
比如下面的,添加工作区,可以把一张图片分割为多张图片
运行效果,可以发现图片变成分开的了
/*
可以看看这个视频
【【C语言/C++】项目实战:烟花表白】
https://www.bilibili.com/video/BV1ZA411L7zx?p=2&vd_source=21581d752de8daca00ef38561a7264f6
*/
#include<graphics.h>
#include<easyx.h>
#include<stdio.h>
#include<time.h>
#define NUM 13
struct Jet
{
int x, y;//烟花弹的坐标 当前的坐标
int hx, hy;//烟花弹最高的坐标
bool shoot;//烟花弹的状态(是否发射)
unsigned long t1, t2, dt;//速度(单位时间dt=t2-t1)
IMAGE img[2];//两张图片 img[0]-暗色图片 ing[1]-亮色图片 一闪一闪的效果
byte n : 1;//位段(可以用到CPU里面,n是一个变量 1个位 1/8个字节 n++对于0 1 0 1……
}jet[NUM]; //img[n++]一闪一闪的效果
void load()
{
srand(time(NULL));
IMAGE bigimg;//先加载一整张图片
loadimage(&bigimg, _T("1.jpg"), 200, 50);
//工作区(就是能看到的窗口)
SetWorkingImage(&bigimg);
//分解一张图片为多张图片
for (int i = 0; i < NUM; i++)
{
int n = rand() % 5;//随机得到一个下标
getimage(&jet[i].img[0],n*20,0,20,50);//
getimage(&jet[i].img[1],(n+5)*20,0,20,50);
}
SetWorkingImage(NULL);//回到默认工作区
}
void init(int i)//初始化
{
jet[i].x=0;
jet[i].y=0;
jet[i].hx=0;
jet[i].hy=0;
jet[i].t1=GetTickCount();//获取系统的时间
jet[i].t2=0;
jet[i].dt=rand()%10+1;//1ms到10ms之间
jet[i].n=0;
jet[i].shoot=false;
IMAGE bigimg;//先加载一整张图片
loadimage(&bigimg, _T("1.jpg"), 200, 50);
//jet[i].img[0];
//jet[i].img[1];
}
//烟花弹出现的时间间隔
void choise(DWORD& tt1)
{
DWORD tt2 = GetTickCount();
if (tt2 - tt1 > 100)
{
int i = rand() % NUM;//0-12
if (jet[i].shoot == false)
{
//数据重新规划一下
jet[i].x = rand()%(1200-20);
jet[i].y = rand()%(100+600);//600-699
jet[i].hx = jet[i].x;
jet[i].hy = rand()%400;//0-399
jet[i].shoot = true;
putimage(jet[i].x, jet[i].y, &jet[i].img[jet[i].n]);//只要n++,就会一闪一闪的
}
tt1 = tt2;
}
}
void Shoot()
{
for (int i = 0; i < NUM; i++)
{
jet[i].t2 = GetTickCount();
if (jet[i].t2 - jet[i].t1 > jet[i].dt && jet[i].shoot == true)
{
putimage(jet[i].x, jet[i].y, &jet[i].img[jet[i].n]);//只要n++,就会一闪一闪的
if(jet[i].y>jet[i].hy)
{
jet[i].n++;
jet[i].y -= 5;//上升的效果
}
putimage(jet[i].x, jet[i].y, &jet[i].img[jet[i].n]);
if (jet[i].y <= jet[i].hy)//到达了最高的高度
{
putimage(jet[i].x, jet[i].y, &jet[i].img[jet[i].n]);
//它的使命完成
jet[i].shoot = false;//便于重复使用
}
jet[i].t1 = jet[i].t2;
}
}
}
int main()
{
initgraph(1200, 800);
DWORD tt1 = GetTickCount();
load();
putimage(100, 100, &jet[5].img[0]);
putimage(150, 100, &jet[5].img[1]);
for (int i = 0; i < NUM; i++)
{
init(i);
}
while (1)
{
choise(tt1);
Shoot();
}
getchar();
}
Code over!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/131373.html