【求助】关于EasyX_Help示例函数里的鼠标操作范例
easyx吧
全部回复
仅看楼主
level 3
运行了示例函数之后发现它画的点和方块不会擦除,于是想试着弄出点和方块会在一定时间后自动擦除的效果。
结果发现我太弱了只会用sleep,但是sleep会全部停下,做不到一边擦除一遍继续画画。orz
所以想问问要怎么弄出上述效果。
【跪】
2018年01月08日 14点01分 1
level 3
↓ 这是它的示例
#include <graphics.h>
#include <conio.h>
int main()
{
// 初始化图形窗口
initgraph(640, 480);
MOUSEMSG m;// 定义鼠标消息
while(true)
{
// 获取一条鼠标消息
m = GetMouseMsg();
switch(m.uMsg)
{
case WM_MOUSEMOVE:
// 鼠标移动的时候画红色的小点
putpixel(m.x, m.y, RED);
break;
case WM_LBUTTONDOWN:
// 如果点左键的同时按下了 Ctrl 键
if (m.mkCtrl)
// 画一个大方块
rectangle(m.x-10, m.y-10, m.x+10, m.y+10);
else
// 画一个小方块
rectangle(m.x-5, m.y-5, m.x+5, m.y+5);
break;
case WM_RBUTTONUP:
return;// 按鼠标右键退出程序
}
}
// 关闭图形窗口
closegraph();
}
2018年01月08日 14点01分 2
level 13
建议你设计一个计时器,总体思路如下:在总循环之前初始化时间time=0; 然后在循环中(或是在图形处理中)每次都让时间加某个固定单位时间,然后判断这个时间是否是擦去时间,如果是就执行擦去的语句。
2018年01月09日 00点01分 3
level 13
int time = 0;
while(time<500){
// 绘制图片
……
// 判断是否需要擦去
if(time%5==0){擦去}
sleep(500);
time++;
}
2018年01月09日 00点01分 4
也就是说每2.5秒擦去一次。当然这也只是我的想法。楼主也可以用其他方法的。
2018年01月09日 00点01分
level 12
你得用个数组记录下来每个位置画了什么,然后才能在以后擦掉。
2018年01月09日 16点01分 5
level 3
我如果想要每一个点都在一定时间后消失的话,可能需要弄个time数组,来记录每一个点的存在时常与是否消除?在画了一个点之后,也许还需要一个flag数组,提醒我这次循环后需不需要在time数组里加1?然后要是弄数组的话,我要考虑数组长度就需要考虑一次性出现在屏幕上的点的最大数量?@yangw80 @就是喜欢**aby
2018年01月11日 06点01分 6
先不要考虑那么多,先做能实现的部分。通常,做了开始,后面就知道该怎么做了。
2018年01月11日 08点01分
@yangw80 我就是不知道怎么着手啊。。。
2018年01月11日 08点01分
@LLLLLLLLL篮子 先弄个数组,把每个点的坐标保存下来再说~
2018年01月11日 09点01分
level 12
估计你还没学链表呢。这样吧,
先做这样个程序:
定义 x、y 坐标数组各 100 个。
然后移动鼠标,将鼠标的坐标保存到数组中,保存满 100 个就不再保存新的了。
然后按任意键,这 100 个点变为 黄色,再按任意键,这 100 个点变为蓝色。
这个程序不难吧?写出来以后,再一点点加功能,向着你的目标程序改。
2018年01月11日 09点01分 7
level 3
最近期末,复习去了,没有仔细思考。。。
不过我写了一段,虽然和我想的不太一样,但勉强吧。。。
#include <graphics.h>
#include <conio.h>
#define SIZE 50
int main()
{
initgraph(640, 480);
HWND hwnd = GetHWnd();
SetWindowText(hwnd, "跟屁虫");
MOUSEMSG m;
int t = 0;
int i;
int time[SIZE] = { 0 };
int flag[SIZE] = { 0 };
int place[SIZE][2];
while (1)
{
m = GetMouseMsg();
if (m.uMsg == WM_RBUTTONUP)
break;
if (m.uMsg == WM_MOUSEMOVE)
{
putpixel(m.x, m.y, GREEN);
place[t][0] = m.x;
place[t][1] = m.y;
flag[t] = 1;
t = (t + 1) % SIZE;
}
for (i = 0; i < SIZE; i++)
{
if (flag[i])
time[i]++;
if (time[i] == 20)
{
time[i] = 0;
flag[i] = 0;
putpixel(place[i][0], place[i][1], BLACK);
}
}
}
closegraph();
}
@yangw80
2018年01月17日 02点01分 8
level 12
非常帅~,就是这样啊 @LLLLLLLLL篮子
如果喜欢,还可以增加“弹性”,使这些点会弹回鼠标位置。
2018年01月20日 04点01分 9
1