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

Easyx图形库应用(用lua开发图形界面)

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

        前面我们用对easyx做了lua的适配,也就是说,对于easyx的基本接口做好封装之后,就可以用lua进行进行业务开发了。这样,就不需要安装任何其他的软件,也不需要安装第三方库什么的,直接拿起编辑器就可以开发界面了。开发的时候,修改也不需要编译,因为自身的解析器和虚拟机已经集成在里面了。今天,我们正好可以看看,怎么用lua设计一个太阳、地球、月亮的旋转演示效果图。

1、准备一个基本框架

        首先我们准备一个基本框架,也就是基本图形,

initgraph(640,480)
_getch()
closegraph()

2、添加第一个太阳

        太阳的添加比较简单,设置好颜色之后,fill一个圆形即可,

	setfillcolor(red) -- red colorlocal x0 = 320local y0 = 240fillcircle(x0, y0,50)

3、添加地球

        地球本身是围绕着太阳转的,那么这个时候就会涉及到旋转角度。默认当前的旋转角度是angle,并且默认太阳和地球距离180个pixel,

	local radian1 = math.rad(angle) -- angle to randianslocal x1 = x0 + math.floor(180*math.cos(radian1))local y1 = y0 + math.floor(180*math.sin(radian1))setfillcolor(blue) -- blue colorfillcircle(x1, y1,20)

        开发的过程中使用到了math库,这是lua自带的函数库,可以直接使用。不过对lua来说,它最大的优势还是适配的那些API,这样才能体现自身的价值。

4、继续添加月球

        月球的旋转式围绕着地球进行的,同样,也会涉及到一个旋转角度问题,为了简单说明。我们默认旋转角度,是地球围绕太阳旋转角度的两倍,

	local radian2 = math.rad(angle * 2)local x2 = x1 + math.floor(50*math.cos(radian2))local y2 = y1 + math.floor(50*math.sin(radian2))setfillcolor(green) -- green colorfillcircle(x2, y2, 10)

5、更新角度

        角度本身是需要定时更新的。并且更新的时候,需要判断是否越界,

	angle = angle + speed -- increase angle hereif angle == 360 thenangle = 0end

6、让速度变成可配的情形

        细心的同学可能发现了,这里的speed不是一个固定数值。原因就在于我们把它变成了可以配置的形式。即单击空白格,就可以弹出配置窗口,

	if _kbhit() == 1 then  -- check input boxstr = _getch();speed = inputbox()end

7、完整流程

        最后我们给出完整的流程,大家会发现,它和c语言其实差不多。但是好处也是很多的,因为它不需要编译,不需要任何编译环境,入门门槛不高,所以可以适合所有人都拿来看一看、学一学。

-- file:   demo.lua
-- author: feixiaoxing
-- email:  feixiaoxing@163.com
-- date:   2025-10-19initgraph(640,480)
angle = 0
red = 0x0000aa
blue = 0xaa0000
green = 0x00aa00
speed = 1BeginBatchDraw()
while true docleardevice()if _kbhit() == 1 then  -- check input boxstr = _getch();speed = inputbox()endangle = angle + speed -- increase angle hereif angle == 360 thenangle = 0endsetfillcolor(red) -- red colorlocal x0 = 320local y0 = 240fillcircle(x0, y0,50)local radian1 = math.rad(angle) -- angle to randianslocal x1 = x0 + math.floor(180*math.cos(radian1))local y1 = y0 + math.floor(180*math.sin(radian1))setfillcolor(blue) -- blue colorfillcircle(x1, y1,20)local radian2 = math.rad(angle * 2)local x2 = x1 + math.floor(50*math.cos(radian2))local y2 = y1 + math.floor(50*math.sin(radian2))setfillcolor(green) -- green colorfillcircle(x2, y2, 10)FlushBatchDraw()sleep(50)
endEndBatachDraw()
closegraph()

注1:

        另外一个有趣的旋转demo,之前是c语言,现在转成lua语言,

-- file:   demo.lua
-- author: feixiaoxing
-- email:  feixiaoxing@163.com
-- date:   2025-10-19initgraph(640,480)
angle = 0
red = 0x0000aa
blue = 0xaa0000
green = 0x00aa00setfillcolor(red)
solidcircle(320, 240, 50)
setfillcolor(blue)
solidcircle(320, 210, 8)img1 = getimage(270, 190, 100, 100)
img2 = getimage(270, 190, 100, 100)BeginBatchDraw()
while true docleardevice()angle = angle + 2if angle == 360 thenangle = 0endrotateimage(img2, img1, angle)putimage(270, 190, img2)FlushBatchDraw()sleep(50)
endEndBatachDraw()
closegraph()

注2:

        以及碰撞的小球,

-- file:   demo.lua
-- author: feixiaoxing
-- email:  feixiaoxing@163.com
-- date:   2025-10-19initgraph(640,480)
angle = 0
red = 0x0000aa
blue = 0xaa0000
green = 0x00aa00x = 120
y = 120
direction_x = 0
direction_y = 0
speed = 3BeginBatchDraw()
while true docleardevice()if x > 590 thendirection_x = 1endif x < 50 thendirection_x = 0endif y > 430 thendirection_y = 1endif y < 50 thendirection_y = 0endif direction_x == 0 thenx = x + speedelsex = x - speedendif direction_y == 0 theny = y + speedelsey = y - speedendsetfillcolor(red)solidcircle(x,y, 50) FlushBatchDraw()sleep(50)
endEndBatachDraw()
closegraph()

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

相关文章:

  • 点餐小程序模板seo入门视频
  • 做简报的网站企业为何选择网站推广外包?
  • 很多年前的51网站江门网站建设方案
  • 郑州关键词排名顾问如何优化搜索引擎的准确性
  • GD32待机和深度睡眠模式的区别
  • 微网站怎么做企业网页制作推广
  • C++篇(14)二叉树进阶算法题
  • 厦门网站制作维护建工网站
  • 无锡网站建设 无锡和诚科技电子商务网站建设有什么意义
  • python学习之多任务,简单线程的实现
  • 可以免费观看电影的网站创造一个平台要多少钱
  • 品牌网站怎么建设设计好网站
  • CMake下载和安装图解(附安装包,适合新手)
  • 广州网站建设费管理系统前端模板
  • 吴江网站优化南宁网站建设优化服务
  • 服务器做免费空间网站管理录像教程wordpress建的手机网站
  • 网站开发毕业设计开题报告西安竞价托管
  • 中国交通建设网站珠海华兴建设工程有限公司网站
  • “我请客”用英语怎么说?
  • 深度学习——循环神经网络(RNN)
  • 网站下载链接打不开信誉好的常州网站建设
  • 蓬莱做网站公司做别人一样的网站吗
  • 自助建站免费申请个人网页采购网站有哪些
  • 网站下面版权代码长久新开传奇网站
  • 上海网上注册公司官网深圳有实力的seo公司
  • 在电脑中安装双系统(win11 + linux)20251019
  • AD22 xSignal 在串联电阻中的使用
  • 岱山建设网站免费crm网站不用下载的软件
  • 宁波那家公司做网站好网站特效怎么做
  • 网站步骤东莞网站建设排行