当前位置: 首页 > news >正文

Easyx使用(中篇)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        整个easyx用起来还是比较简单的,没有c++,没有多线程,也没有其他复杂的架构和配置,基本上顺着往下写代码就可以了。所以这就意味着,掌握了基本的easyx api,就可以做一些事情了。很多人用它做游戏,做图形学课程,都是可以的。但是不仅仅这些,还可以用它做仿真、做工具、做一些创意产品。所以easyx的最大优势就是开发快,效果快,如果用户对最终gui界面要求不高,直接部署也是可以的。

        今天我们就看看一个运动小球的demo是怎么开发的。

1、画一个小球

        既然是运动小球,那么至少需要画一个小球。做到这一点,不难。即注意画的时候,是用solidcircle,而不是circle。

	setfillcolor(BLUE);solidcircle(x, y, RADIUS);

2、小球的运动

        这里我们说的是运动小球,那么如何让小球运动起来呢?一种直观的方式,就是擦掉重画。确实大部分库也是这么做的,通常我们先调用cleardevice函数清掉,再重新绘制,

		cleardevice();// draw itemsetfillcolor(BLUE);solidcircle(x, y, RADIUS);

3、如何更新x和y

        既然是更新x和y,那么只需要每一次对x和y,做递增、递减运算即可。当然计算的时候,我们还要分析是不是要弹回来。因为显示的时候,还需要判断一下x和y的范围,不然小球就撞到墙里去了。

		// judge directionif (y >= (HEIGHT - RADIUS)){y_direction = 0;}else if (y <= RADIUS){y_direction = 1;}if (x >= (WIDTH - RADIUS)){x_direction = 0;}else if (x <= RADIUS){x_direction = 1;}// judge next dataif (y_direction){y += speed;}else{y -= speed;}if(x_direction){x += speed;}else{x -= speed;}

4、批处理显示

        显示的时候,很多时候,我们是希望所有元素都ready之后,一起刷新显示,这样才不会有画面闪烁。要实现这一点,需要先调用BeginBatchDraw,然后每次绘制结束后,再调用FlushBatchDraw即可。只有程序结束的时候,才会调用EndBatchDraw函数。

5、添加延时函数

        为了有流畅的画面效果,还需要每一个frame渲染结束后,延时若干毫秒。

		Sleep(50);

6、键盘输入

        很多时候,我们需要对软件进行人机交互,那么这个时候就可以通过键盘进行处理。特别是交互不多的时候,就可以通过_kbhit和_getch来实现。

		// get key inputif (_kbhit()){_getch(); // just simulate to get some dataspeed -= 2;if (speed < 0)speed = 10;}

7、信息反馈

        除了键盘输入之外,有些情况下我们也需要从屏幕上读取一些信息,这些信息就可以通过outtextxy反映出来。

		// prepare buffermemset(x_buf, 0, sizeof(x_buf));memset(y_buf, 0, sizeof(y_buf));sprintf(x_buf, "x_pos: %d", x);sprintf(y_buf, "y_pos: %d", y);outtextxy(500, 10, x_buf);outtextxy(500, 30, y_buf);

8、去除编译错误和告警

        实际字符串显示的时候,还有两个错误。第一个错误就是,需要把字符集设置为“使用多字节字符集”,这点可以在项目属性里面设置。还有一个,就是某些函数的使用会触发编译器生成编译告警,所以我们需要引入一个宏,

#define _CRT_SECURE_NO_WARNINGS

9、优化和改进程序

        实际编写的时候,我们会引入很多的坏习惯,比如使用magic number。这部分都可以通过替换macro来解决。至于其他代码习惯部分,就是见招拆招了。实际开发中,我们也会发现,哪怕是简单的程序,也需要不停修改和验证的。最后给出完整的代码,有兴趣的同学可以运行看看。这里使用的vs是2017版本,os是win10,cpu是x86版本。


#define _CRT_SECURE_NO_WARNINGS
#include <graphics.h>
#include <conio.h>
#include <stdio.h>#define WIDTH  640
#define HEIGHT 480
#define RADIUS 20
#define START_X 300
#define START_Y 200// main functionint main()
{int x = START_X;int y = START_Y;int x_direction = 1;int y_direction = 1;int speed = 10;char x_buf[128] = {0};char y_buf[128] = {0};initgraph(WIDTH, HEIGHT);// draw circlesetfillcolor(BLUE);solidcircle(x, y, RADIUS);// start batch drawBeginBatchDraw();while (1){cleardevice();// judge directionif (y >= (HEIGHT - RADIUS)){y_direction = 0;}else if (y <= RADIUS){y_direction = 1;}if (x >= (WIDTH - RADIUS)){x_direction = 0;}else if (x <= RADIUS){x_direction = 1;}// judge next dataif (y_direction){y += speed;}else{y -= speed;}if(x_direction){x += speed;}else{x -= speed;}// draw itemsetfillcolor(BLUE);solidcircle(x, y, RADIUS);// prepare buffermemset(x_buf, 0, sizeof(x_buf));memset(y_buf, 0, sizeof(y_buf));sprintf(x_buf, "x_pos: %d", x);sprintf(y_buf, "y_pos: %d", y);outtextxy(500, 10, x_buf);outtextxy(500, 30, y_buf);FlushBatchDraw();// get key inputif (_kbhit()){_getch(); // just simulate to get some dataspeed -= 2;if (speed < 0)speed = 10;}// sleep for a whileSleep(50);}EndBatchDraw();closegraph();return 0;
}

http://www.dtcms.com/a/432264.html

相关文章:

  • 省品牌建设联合会网站平面设计图片创意手绘
  • 山西教育学会网站建设网站搭建推广优化
  • 移动端开发平台海南百度推广seo
  • 网站建设与维护的国家定价标准淄博专业网站建设公司
  • 网站设计用什么字体网站商城系统建设方案
  • 广东省农业农村厅彭彬湛江网站优化快速排名
  • 亚马逊品牌注册网站建设建设银行怎么从网站上改手机号码
  • 上海建站模板源码个人简历模板免费下
  • 现在c 做网站用什么软件vps安装wordpress
  • 中国移动深圳有限公司门户网站seo怎么做优化排名
  • 外国购物网站设计风格wordpress头部导航栏代码
  • 互联网金融p2p网站建设模板万装网装修平台
  • 做外单都有什么网站网站建公司简介
  • 正规网站制作全包企业网站如何去做优化
  • 太仓网站制作网站建设网站首页栏目设置
  • aspnet网站开发教程数据库常州快速建站模板
  • 【算法竞赛学习笔记】基础算法篇:递归再探
  • 杭州门户网站建设工信部网站备案怎么查询
  • 多线程环境下虚函数性能评估与优化指南
  • 高端网站设计欣赏视频门户网站建设服务器
  • 实用的LoRaWAN 应用层协议规范
  • 阿里云 建网站攻略做网站一屏一屏的
  • 沈阳营销型网站开发网站的流量怎么赚钱
  • 网站开发属于什么费用wordpress 文章循环
  • 音视频编解码全流程之用Extractor后Decodec
  • 03.动画眼睛跟随鼠标光标 | JavaScript 鼠标移动事件
  • 瑞安学校网站建设哈尔滨网站优化技术
  • 南和邢台网站制作色彩设计网站
  • tauri2使用fs的watch报错fs:watch “Command watch not found“
  • 国外优秀vi设计网站eclipse网站建设