赞
踩
在最近的组队做坦克大战项目中,我也是丰富了自己的知识库,学会了easyx的几种以前没有接触过的函数,由于在之前博主的文章《Easyx图形库的基础知识》中没有提到,所以今天博主特地发一篇easyx的进阶版文章来总结这几种常用的函数或操作。
1.鼠标操作:
MOUSEMSG msg; //定义一个鼠标消息
msg=GetMouseMsg();//获取鼠标消息
switch(msg.uMsg)
{
case WM_MOUSEMOVE: ……break;//鼠标移动消息
case WM_MOUSEWHEEL: ……break;// 鼠标滚轮拨动消息
case WM_LBUTTONDOWN: ……break;// 左键按下消息
case WM_MBUTTONDOWN: ……break;// 中键按下消息
case WM_RBUTTONDOWN: ……break;// 右键按下消息
}
2.双缓冲操作,用于缓解屏幕操作(比如这次坦克大战操作中,我们对于被子弹打到的坦克的重新刷新就用到这个函数)是配套存在的他俩。
BeginBatchDraw();
EndBatchDraw();
3.放映图片函数:
putimage(pos_x,pos_y,photo_width,photo_high,&image,photo_x,photo_y);//pos_x,pos_y表图片显示的位置,photo_width,photo_high表图片的大小,&image图片的地址,photo_x,photo_y表从该处开始取图
4.获得图片image的宽和高:
IMAGE iamge;
image.getwidth();//获取宽
image.getheight();//获取高
5.计时(记秒数),不要忘了他的必添加头文件
#include <time.h>//头文件
clock_t start=clock();
clock_t end=(clock()-start)/CLOCKS_PER_SEC;
6.画旋转线段:
int line_long;//线段长度
float line_Alge;//每次转动的角度
int center_x,center_y,end_x,end_y;//线段的起点与终点
end_x=center_x+line_long*sin(line_Alge);
end_y=center_y+line_long*cos(line_Alge);
line(center_x,center_y,end_x,end_y);
7.随机函数:
#include <time.h>;
int num=rand()%100;//从0-99之间随机选取一个数
在使用随机函数的开始出要用随机函数的种子,避免每次出现的随机数是一样的:srand((unsigned int)time(NULL));//这句是必备的且常用。
8.创立图形窗口并保留控制台窗口:
initgraph(w,h, SHOWCONSOLE),w、h的意义不必多说,重点关注第三个参数。
9.播放音乐:其实这并不算图形库的内容,但博主我觉得很常见且好用,所以放出来啦。
#include <mmsystem.h> //必备头文件
#pragma comment(lib,”winmm.lib”) //引用静态库
mciSendstring(“open 音乐文件名(加文件类型,例:.mp3) alias music”,NULL,NULL,NULL);
//将音乐文件放在与源文件同一目录下,alias music的意思就是将这个音乐文件重新命名为music
mciSendstring(“play music repeat”,NULL,NULL,NULL);//播放音乐,play意为播放,同样可换做pause:暂停,stop:停止,close:关闭,Resume:继续。Repeat意为重复播放。
mciSendstring(“stop music repeat”,NULL,NULL,NULL);//暂停播放音乐。
10.防止闪屏操作(其实上面有讲过,这里主要是讲操作思路)
1,在循环画之前加上:BeginBatchDraw();//开始批量绘图
2,在循环中,画图之下加上:FlushBatchDraw();
3,在循环下面,加上:EndBatchDraw();//结束批量绘图
4,如有需要可以延迟程序:Sleep();//让程序睡眠多少毫秒,注意是毫秒哦(博主踩过的坑)
11.键盘消息函数(获取键盘按键消息)
获取鼠标消息函数【用来控制x,y坐标】
//getch(); 需要头文件 <conio.h>
·getch();需要使用返回值来判断//使用_kbhit()判断有无键盘消息
·非ASCII表字符:上(72),下(80),左(75),右(77)
//GetAsyncKeyState(键值); 需要头文件 windows.h
·GetAsyncKeyState(键值);需要传入一个键值
·如果按下这些返回真:上(VK_UP),下(VK_DOWN),左(VK_LEFT),右(VK_RIGHT)
//【注意:也可使用大写字母表示】
//【注意:(graphics.h包含了windows.h,也包含了放音乐的头文件:<mmsystem.h>】
12.修改窗口
·GetHWnd();//获取窗口句柄,获取之后可以用来操作窗口【弹窗】
//HWND hwnd=GetHWnd();//获得窗口句柄
//SetWindowText(hwnd,标题名称);//修改窗口标题
//MessageBox(hwnd,对话框内容,标题名称,MB_OKCANCEL);
13.播放音乐函数(和上面讲的一样,只是这里再作补充)
//mciSendString("open hh.mp3 alias BBB",NULL,0,NULL); 打开音乐//alias为路径取别名
//mciSendString("play BBB repeat",NULL,0,NULL);播放音乐//加上repeat可以重复播放
//mciSendString("close BBB",NULL,0,NULL);关闭音乐
14.获取用户输入:
// 八、获取用户输入
bool InputBox(LPTSTR pString, int nMaxCount, LPCTSTR pPrompt = NULL, LPCTSTR pTitle = NULL, LPCTSTR pDefault = NULL, int width = 0, int height = 0, bool bOnlyOK = true);
// 鼠标消息
// 支持如下消息:
// WM_MOUSEMOVE 鼠标移动
// WM_MOUSEWHEEL 鼠标滚轮拨动
// WM_LBUTTONDOWN 左键按下
// WM_LBUTTONUP 左键弹起
// WM_LBUTTONDBLCLK 左键双击
// WM_MBUTTONDOWN 中键按下
// WM_MBUTTONUP 中键弹起
// WM_MBUTTONDBLCLK 中键双击
// WM_RBUTTONDOWN 右键按下
// WM_RBUTTONUP 右键弹起
// WM_RBUTTONDBLCLK 右键双击
struct MOUSEMSG
{
UINT uMsg; // 当前鼠标消息
bool mkCtrl; // Ctrl 键是否按下
bool mkShift; // Shift 键是否按下
bool mkLButton; // 鼠标左键是否按下
bool mkMButton; // 鼠标中键是否按下
bool mkRButton; // 鼠标右键是否按下
short x; // 当前鼠标 x 坐标
short y; // 当前鼠标 y 坐标
short wheel; // 鼠标滚轮滚动值 (120 的倍数)
};
bool MouseHit(); // 检查是否存在鼠标消息
MOUSEMSG GetMouseMsg(); // 获取一个鼠标消息。如果没有,就等待
bool PeekMouseMsg(MOUSEMSG *pMsg, bool bRemoveMsg = true); // 获取一个鼠标消息,并立即返回
void FlushMouseMsgBuffer(); // 清空鼠标消息缓冲区
好啦,今天的分享就到此为止啦,本篇为博主从各大网站搜集有关资料整理而成。如果大家对于想用C语言或c++结合easyx图形库来编程游戏有兴趣想学的话,博主给大家推荐一本书《c和c++游戏趣味编程》这本书,通过几个游戏手把手教你制作,游戏难度逐渐增大。
好啦,谢谢大家的浏览
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。