当前位置:文档之家› 串口屏LUA教程-如何显示文本

串口屏LUA教程-如何显示文本

串口屏LUA教程-如何显示文本
串口屏LUA教程-如何显示文本

工程技术笔记

LUA 例程-如何显示文本V1.0

Technical Note

修订历史

版本日期原因编制审查V1.02019/02/27创建文档林青田

目录

1.适合范围 (1)

2.开发环境版本 (2)

3.概述 (3)

4.教程实现 (4)

4.1准备工程素材 (4)

4.1.1硬件平台 (4)

4.1.2UI素材准备 (5)

4.1.3LUA编辑器 (5)

4.2API函数说明 (6)

4.3实现功能 (7)

4.3.1显示文本 (7)

4.4下载工程 (9)

4.4.1下载 (10)

5.完整程序清单 (11)

6.免责声明 (13)

1.适合范围

该文档适合所有大彩物联型系列。

2.开发环境版本

1.VisualTFT软件版本:V3.0.0.944及以上的版本。

版本查看:

a)打开VisualTFT软件启动页面如图2-1软件版本,右上角会显示的软件版本号;

图2-1软件版本

b)打开VisualTFT,在软件右下角可以查看软件版本图2-2软件版本,

最新版本可登录大彩官网进行下载。

图2-2软件版本

2.串口屏硬件版本:V

3.0.301.0及以上的版本。

版本查看:

a)查看屏幕背面版本号贴纸;

b)VisualTFT与屏幕联机成功后,右下角显示的版本号。

3.LUA语言版本V5.5。

3.概述

物联型串口屏通过LUA脚本配合工程可以完成大部分的内部逻辑处理,可以做到让MCU只参与数据处理,不参与屏的逻辑处理。

本文将介绍大彩LUA脚本API函数中的绘图API函数使用方法,以及使用函数的注意事项。

4.教程实现

本章节主要通过LUA教程demo讲述如何设置文本控件的API函数使用以及编写程序的注意事项。本文将分为以下是3个阶段讲述教程DEMO是如何实现的:

1.准备工程素材,

2.实现功能,

3.下载工程。

4.1准备工程素材

在实现教程DEMO前需要作以下三个准备:

1.硬件平台,

2.UI素材,

3.LUA编辑器。

4.1.1硬件平台

该例程使用大彩物联型7寸串口屏DC80480W070为验证开发平台。如图5-1所示

图5-1物联型7寸串口屏

其他尺寸的物联型串口屏均可借鉴此教程。

4.1.2UI素材准备

准备好相应的美工UI。如图5-2所示

图5-2素材准备

4.1.3LUA编辑器

上位机VisualTFT内部已集成了LUA开发编译环境,点击菜单栏工具,选择LUA编辑器,如图5-3所示。

图5-3打开LUA编辑器

打开编辑器后,Visual TFT画面如图5-4所示;

图5-4LUA编辑器

4.2API函数说明

大彩科技针对LUA脚本提供了丰富的API接口函数,具体函数可以查阅文档《物联型LUA脚本API》,如图5-5所示。

图5-5API函数文档

本教程文档中所涉及到的部分的相关接口函数

1.函数set_text(screen,control,str)

注释:指定某个画面中的文本控件或者二维码控件显示指定内容:

2.函数on_screen_change(screen)

注释:当画面切换至目标画面ID时,执行此回调函数

参数:screen表示目标画面ID

4.3实现功能

教程中功能的实现步骤如下:

1.配置工程属性,

2.编写程序以及编译,

3.运行程序。

4.3.1显示文本

1.在教程DEMO的画面中,实现点击按钮在文本框中显示“HELLO LUA”,运行虚拟屏

后工程画面如图5-6所示

图5-6绘制基本图形画面

2.LUA程序解释:按下按钮后在文本框中显示“HELLO LUA”,程序如程序清单1所示;

程序清单1获取绘图类型

--[[***************************************************************************

**Function name:on_control_notify

**Descriptions:用户通过触摸修改控件后,执行此回调函数。

点击按钮控件,修改文本控件、修改滑动条都会触发此事件。

注意:回调函数的参数和函数名固定不能修改

**Input value:screen画面ID

control控件ID

value控件值(包括文本控件输入的值)

***************************************************************************--]]

function on_control_notify(screen,control,value)

if screen==0and control==1and value==1then

set_text(0,2,"HELLO LUA")

end

end

编写完功能模块后将工程和脚本一起进行编译,编译成功后可以使用软件中的虚拟屏查看程序是否实现功能,点击工具栏中编译工程按钮,可将工程和脚本的一起编译,操作如图5-7所示

图5-7编译工程

注意:目前在软件Visual TFT集成的LUA脚本编译器无法进行语法检测,所以编写LUA程序是尽量分模块编写,已达到节省调试的时间。

3.点击工具栏中的运行虚拟串口屏,软件先会将当前工程进行编译,编译成功后工程

会在虚拟屏上运行起来,如图5-8所示

图5-8基本绘图示例

4.4下载工程

在我司的上层软件Visual TFT中集成了LUA程序的编译器,可以实现在编译工程的同时将LUA脚本程序一起编译,并且将编译后的图片和程序集合在一个名为DCIOT.PKG的

文件中。编译后只需要把DCIOT.PKG文件拷贝到U盘中,接上串口屏并重新上电即可将图片和程序下载到屏中。

4.4.1下载

工程编译成功后在输出窗口会提示编译成功,如所示。编译成功后打开工程目录,找到output文件夹,将文件夹中的DCIOT.PKG文件拷贝到U盘中,如图5-9和图5-10所示;接上串口屏重新上电,等到提示烧录工程成功后,拔掉U盘重新上电即可。

图5-9编译成功

图5-10拷贝

5.完整程序清单

LUA教程-绘图API函数说明demo的完整程序,如程序清单2完整程序所示,查看程序时请结合教程demo理解:

程序清单2完整程序

--[[*****************************Copyright(c)**********************************

**Guangzhou DACAIGAUNGDIAN Technology Co.Ltd

**

**https://www.doczj.com/doc/a48565187.html,

**

**------File Info-----------------------------------------------------------

**File Name:main.lua

**Latest modified Date:2019/2/22

**Latest Version:

**Description:显示文字

**

**--------------------------------------------------------------------------

**Created By:林青田

**Created date:2019/2/22

**Version:V1.0

**Descriptions:显示文字

**

**--------------------------------------------------------------------------

**Modified by:

**Modified date:

**Version:

**Description:

**

***************************************************************************--]]

--[[***************************************************************************

**Function name:on_control_notify

**Descriptions:用户通过触摸修改控件后,执行此回调函数。

点击按钮控件,修改文本控件、修改滑动条都会触发此事件。

注意:回调函数的参数和函数名固定不能修改

**Input value:screen画面ID

control控件ID

value控件值(包括文本控件输入的值)

***************************************************************************--]]

function on_control_notify(screen,control,value)

if screen==0and control==1and value==1then

set_text(0,2,"HELLO LUA")

end

end

--[[************************************************************************ END FILE

************************************************************************--]]-]]

6.免责声明

广州大彩光电科技有限公司所提供的所有服务内容旨在协助客户加速产品的研发进度,在服务过程中或者其他渠道所提供的任何例程程序、技术文档、CAD图等资料和信息,都仅供参考,客户有权不使用或自行参考修改,本公司不提供任何的完整性、可靠性等保证,若在客户使用过程中因任何原因造成的特别的、偶然的或间接的损失,本公司不承担任何责任。

LUA各种库

1.math库 函数名描述示例结果 pi圆周率math.pi 3.1415926535898 abs取绝对值math.abs(-2012)2012 ceil向上取整math.ceil(9.1)10 floor向下取整math.floor(9.9)9 max取参数最大值math.max(2,4,6,8)8 min取参数最小值math.min(2,4,6,8)2 pow计算x的y次幂math.pow(2,16)65536 sqrt开平方math.sqrt(65536)256 mod取模math.mod(65535,2)1 modf取整数和小数部分math.modf(20.12)200.12 randomseed设随机数种子math.randomseed(os.time()) random取随机数math.random(5,90)5~90 rad角度转弧度math.rad(180) 3.1415926535898 deg弧度转角度math.deg(math.pi)180 exp e的x次方math.exp(4)54.598150033144 log计算x的自然对数math.log(54.598150033144)4 log10计算10为底,x的对数math.log10(1000)3 frexp将参数拆成x*(2^y)的形式math.frexp(160)0.6258 ldexp计算x*(2^y)math.ldexp(0.625,8)160 sin正弦math.sin(math.rad(30))0.5 cos余弦math.cos(math.rad(60))0.5 tan正切math.tan(math.rad(45))1 asin反正弦math.deg(math.asin(0.5))30 acos反余弦math.deg(math.acos(0.5))60 atan正切math.deg(math.atan(1))45

《C语言程序设计实践教程》答案-完整版

4.2练习题 一、选择题 1.D 2.B 3.A 4.B和D 5.C 6.A 7.B 二、填空题 1.//或/* */ 2.主或main 3.函数首部和函数体 4..编译和连接 5.分号6.传统的程序流程图和N-S图 5.2练习题 一、选择题 1.A 2.D 3.B 4.B 5.C 6.C 7 D 8.A 9.B 10.B 11.D 12.B 13A或B 14.C 15.B 16.B 17.D 18.D 19. C 20.D 21.B 22.A 23.D 24.C 25.C 26.B 27.C 28.D 29.A 30.B 二、填空题 1.102,10 2.#define 宏名字符串 3.1 4.. n=1 5.-4 6.a=1,b= ,c=2 7. c=A 8.n1=%d\nn2=%d 9.a+b>c&&a+c>b&&b+c>a 10.ch>=’a’&&ch<=’z’|| ch>=’A’&&ch<=’Z’11.7 12.0 13.11110000 14.8,4 6.2练习题 一、选择题 1.A 2.C 3.D 4.C 5.A 6.B 7. A 8.D 9.B 10.C 11.A 12.A 13. C 14.B 15.正确答案为:12345678

二、填空题 1.10 2.y=1 x%i==0 3.屏幕中间输出一个由星号组成的菱形4. 1 5.13 6.(cx=getchar())!=-1 front=cx; 7. m%n 8.4 9.*p px=&x py=&y 三、读程序,写结果 1.-1 2.3,1,-1, 3.a=16,y=60 4.x=12,y=4 5.59 7.2练习题 一、选择题 1.B 2.C 3.C 4.A 5.D 6.C 7. D 8.D 9.C 10.D 11.D 12.D 13 A 14.B 15.C 16.B 17.B 18.A 19 A 20.D 21.B 22.D 23.C 24.D 25. D 26.C 二、填空题 1.‘a’0 2.a[k] a[k] a[k] 3.0 6 4….A B C D E 5. 1,6 6.k=p; A 7. i

串口屏LUA教程-定时器的使用

工程技术笔记 LUA 教程-定时器的使用V1.0 Technical Note

修订历史 版本日期原因编制审查V1.02019/01/15创建文档林绍佳刘启鑫

目录 1.适合范围 (1) 2.开发环境版本 (2) 3.概述 (3) 4.实现教程 (4) 4.1工程准备 (4) 4.1.1硬件平台 (4) 4.1.2素材准备 (4) 4.1.3LUA编辑器 (5) 4.2API函数说明 (6) 4.3教程实现过程 (7) 4.3.1定时器的使用 (7) 4.4编译和下载 (10) 4.4.1编译工程 (10) 4.4.2下载 (11) 5.完整程序清单 (12) 6.免责声明 (15)

1.适合范围 该文档适合所有大彩物联型系列。

2.开发环境版本 1.VisualTFT软件版本:V3.0.0.944及以上的版本。 版本查看: a)打开VisualTFT软件启动页面如图2-1软件版本,右上角会显示的软件版本号; 图2-1软件版本 b)打开VisualTFT,在软件右下角可以查看软件版本图2-2软件版本, 最新版本可登录大彩官网进行下载。 图2-2软件版本 2.串口屏硬件版本:V 3.0.301.0及以上的版本。 版本查看: a)查看屏幕背面版本号贴纸; b)VisualTFT与屏幕联机成功后,右下角显示的版本号。 3.LUA语言版本V5.5。

3.概述 物联型可以通过LUA脚本配合工程完成丰富多样的操作。 本文将介绍在LUA脚本中使用定时器循环设置按钮的状态。在按下按钮后,定时器启动,定时器以设定的时间为标准,循环设置灯亮/灭。

串口屏LUA例程-音频播放器V1.0

工程技术笔记 LUA 例程-音频播放器V1.0 Technical Note

修订历史 版本日期原因编制审查V1.02019/02/28创建文档林青田刘启鑫

目录 1.适合范围 (1) 2.开发环境版本 (2) 3.概述 (3) 4.参考资料.........................................................................错误!未定义书签。 5.教程实现 (4) 5.1准备工程素材 (4) 5.1.1硬件平台 (4) 5.1.2UI素材准备 (4) 5.1.3LUA编辑器 (5) 5.2API函数说明 (6) 5.3实现功能 (8) 5.3.1工程配置 (8) 5.3.2程序具体解析 (8) 6.完整程序清单 (13) 7.免责声明 (24)

1.适合范围 该文档适合所有广州大彩物联型系列。

2.开发环境版本 1.VisualTFT软件版本:V3.0.0.944及以上的版本。 版本查看: a)打开VisualTFT软件启动页面如图2-1软件版本,右上角会显示的软件版本号; 图2-1软件版本 b)打开VisualTFT,在软件右下角可以查看软件版本图2-2软件版本, 最新版本可登录大彩官网进行下载。 图2-2软件版本 2.串口屏硬件版本:V 3.0.301.0及以上的版本。 版本查看: a)查看屏幕背面版本号贴纸; b)VisualTFT与屏幕联机成功后,右下角显示的版本号。 3.LUA语言版本V5.5。

3.概述 物联型串口屏通过LUA脚本配合工程可以实现播放循环屏内部或者外部音频的功能。

XLua_API

C# API LuaEnv类 object[] DoString(string chunk, string chunkName = "chuck", LuaTable env = null) 描述: 执行一个代码块。 参数: chunk: Lua代码文字串; chunkName:发生error时的debug显示信息中使用,指明某某代码块的某行错误; env :这个代码块的环境变量; 返回值: 代码块里return语句的返回值; 比如:return 1, “hello”,DoString返回将包含两个object的数组,一个是double类型的1,一个是string类型的“hello” 例子: LuaEnv luaenv = new LuaEnv(); object[] ret = luaenv.DoString("print(‘hello’)\r\nreturn 1") UnityEngine.Debug.Log("ret="+ret[0]); luaenv.Dispose() T LoadString(string chunk, string chunkName = "chunk", LuaTable env = null) 描述: 加载一个代码块,但不执行,只返回类型可以指定为一个delegate或者一个LuaFunction 参数: chunk: Lua代码的字符串; chunkName:发生error时的debug显示信息中使用,指明某某代码块的某行错误; env :这个代码块的环境变量; 返回值: 代表该代码块的delegate或者LuaFunction类; LuaTable Global; 描述: 代表lua全局环境的LuaTable void Tick() 描述: 清除Lua的未手动释放的LuaBase对象(比如:LuaTable, LuaFunction),以及其它一些事情。 需要定期调用,比如在MonoBehaviour的Update中调用。 void AddLoader(CustomLoader loader)

c语言视频教程

C语言视频教程 C语言全套视频教程c语言入门,c语言视频教程的在线学习,相关课件软件的下载,知识点讲解入门,是您学习c语言程序设计教程的最佳选择。 1第一讲iOS开发必备之C语言基础--进制转换 包含知识点:进制定义、程序开发中常用进制介绍、n进制转换10进制、10进制转换n进制。 2第二讲iOS开发必备之C语言基础--数据类型、运算符 数据类型分类、常量、变量、运算符、表达式、语句、输入输出函数。 3第三讲iOS开发必备之C语言基础--分支结构-if 程序结构概述、关系运算符、逻辑运算符、if的三种形式、条件运算符。

4第四讲iOS开发必备之C语言基础--分支结构-switch...case switch case,if与switch case区别,break关键字 5第五讲iOS开发必备之C语言基础--循环结构 while、do while、for循环,三种循环的区别 6第六讲iOS开发必备之C语言基础--循环嵌套 循环的嵌套使用、break关键字、continue关键字。 7第七讲iOS开发必备之C语言基础--一维数组 构造数据类型、一维数组定义、数组元素使用、冒泡排序。 8第八讲iOS开发必备之C语言基础--字符数组 字符数组、字符数组的输入输出、字符数组常用函数(strlen、strcpy、strcat、strcmp等)。 9第九讲iOS开发必备之C语言基础--二维数组 二维数组定义、二维数组元素使用、二维数组与循环结构结合使用、二维数组使用场景。 10第十讲iOS开发必备之C语言基础--字符串数组

字符串数组定义、二维数组操作每个字符串、二维数组操作每个字符、字符串排序、多维数组。 11第十一讲iOS开发必备之C语言基础--函数定义 函数意义、函数分类、函数定义、函数使用、函数举例。 12第十二讲iOS开发必备之C语言基础--函数嵌套 形参、实参、数组名作为函数参数,函数嵌套调用,递归函数,变量作用域。 13第十三讲iOS开发必备之C语言基础--结构体 结构体特点、结构体定义、结构体变量、typedef关键字、结构体成员访问,结构体使用。 14第十四讲iOS开发必备之C语言基础--结构体与数组混合使用 结构体嵌套结构体、结构体作为数组成员、结构体数组冒泡排序。 15第十五讲iOS开发必备之C语言基础--指针初级 内存的两种方式、指针、指针变量、指针的类型、指针的重指向 16第十六讲iOS开发必备之C语言基础--指针作为函数参数

谭浩强C语言教程Word版

软件简介: 1 C语言概述2 1.1 C语言的发展过程2 1.2 当代最优秀的程序设计语言2 1.3 C语言版本2 1.4 C语言的特点3 1.5 面向对象的程序设计语言3 1.6 C和C++3 1.7 简单的C程序介绍4 1.8 输入和输出函数5 1.9 C源程序的结构特点6 1.10 书写程序时应遵循的规则6 1.11 C语言的字符集6 1.12 C语言词汇7 1.13 Turbo C 2.0集成开发环境的使用8 1.1 3.1 Turbo C 2.0简介和启动8 1.13.2 Turbo C 2.0集成开发环境8 1.13.3 File菜单9 1.13.4 Edit菜单10 1.13.5 Run菜单11 1.13.6 Compile菜单12 1.13.7 Project菜单13 1.13.8 Options菜单14 1.13.9 Debug菜单18 1.13.10 Break/watch菜单19 1.13.11 Turbo C 2.0的配置文件20 2 程序的灵魂—算法1 2.1 算法的概念1 2.2 简单算法举例1 2.3 算法的特性4 2.4 怎样表示一个算法4 2.4.1 用自然语言表示算法4 2.4.2 用流程图表示算法4 2.4.3 三种基本结构和改进的流程图8 2.4.4 用N-S流程图表示算法9 2.4.5 用伪代码表示算法10 2.4.6 用计算机语言表示算法11 2.5 结构化程序设计方法11 2 3 数据类型、运算符与表达式1 3.1 C语言的数据类型1 3.2 常量与变量3

3.2.1 常量和符号常量3 3.2.2 变量3 3.3 整型数据4 3.3.1 整型常量的表示方法4 3.3.2 整型变量5 3.4 实型数据7 3.4.1 实型常量的表示方法7 3.4.2 实型变量8 3.4.3 实型常数的类型9 3.5 字符型数据9 3.5.1 字符常量9 3.5.2 转义字符9 3.5.3 字符变量10 3.5.4 字符数据在内存中的存储形式及使用方法10 3.5.5 字符串常量11 3.5.6 符号常量12 3.6 变量赋初值12 3.7 各类数值型数据之间的混合运算13 3.8 算术运算符和算术表达式14 3.8.1 C运算符简介14 3.8.2 算术运算符和算术表达式15 3.9 赋值运算符和赋值表达式17 3.10 逗号运算符和逗号表达式18 3.11 小结19 3.11.1 C的数据类型19 3.11.2 基本类型的分类及特点19 3.11.3 常量后缀19 3.11.4 常量类型19 3.11.5 数据类型转换19 3.11.6 运算符优先级和结合性20 3.11.7 表达式20 4 最简单的C程序设计—顺序程序设计1 4.1 C语句概述1 4.2 赋值语句3 4.3 数据输入输出的概念及在C语言中的实现4 4.4 字符数据的输入输出4 4.4.1 putchar 函数(字符输出函数)4 4.4.2 getchar函数(键盘输入函数)5 4.5 格式输入与输出5 4.5.1 printf函数(格式输出函数)5 4.5.2 scanf函数(格式输入函数) 8 4.6 顺序结构程序设计举例12 4 5 分支结构程序1

xLua教程

教程 文件加载 一、执行字符串 最基本是直接用执行一个字符串,当然,字符串得符合语法 比如:("(' ')") 完整代码见\\\目录 但这种方式并不建议,更建议下面介绍这种方法。 二、加载文件 用的函数即可 比如:(" ''") 完整代码见\\\目录 实际上是调一个个的去加载,有一个成功就不再往下尝试,全失败则报文件找不到。 目前除了原生的外,还添加了从加载的,需要注意的是因为只支持有限的后缀,放下的文件得加上后缀(见附带的例子)。 建议的加载脚本方式是:整个程序就一个(" ''"),然后在加载其它脚本(类似脚本的命令行执行:)。 有童鞋会问:要是我的文件是下载回来的,或者某个自定义的文件格式里头解压出来,或者需要解密等等,怎么办?问得好,的自定义可以满足这些需求。 三、自定义 在加自定义是很简单的,只涉及到一个接口: [] ( ); ( ) 通过可以注册个回调,该回调参数是字符串,代码里头调用时,参数将会透传给回调,回调中就可以根据这个参数去加载指定文件,如果需要支持调试,需要把修改为真实路径传出。该回调返回值是一个数组,如果为空表示该找不到,否则则为文件的内容。 有了这个就简单了,用的?没问题。写个调用的接口读文件内容即可。文件已经加密?没问题,自己写读取文件解密后返回即可。。。

完整示例见\\\ 访问 这里指的是主动发起对数据结构的访问。 本章涉及到的例子都可以在\\下找到。 一、获取一个全局基本数据类型 访问就可以了,上面有个模版方法,可指定返回的类型。 <>("") <>("") <>("") 二、访问一个全局的 也是用上面的方法,那类型要指定成啥呢? 、映射到普通或 定义一个,有对应于的字段的属性,而且有无参数构造函数即可,比如对于{ , }可以定义一个包含;的。 这种方式下会帮你一个实例,并把对应的字段赋值过去。 的属性可以多于或者少于的属性。可以嵌套其它复杂类型。 要注意的是,这个过程是值拷贝,如果比较复杂代价会比较大。而且修改的字段值不会同步到,反过来也不会。 这个功能可以通过把类型加到生成降低开销,详细可参见配置介绍文档。 那有没有引用方式的映射呢?有,下面这个就是: 、映射到一个 这种方式依赖于生成代码(如果没生成代码会抛异常),代码生成器会生成这个的实例,如果一个属性,生成代码会对应的字段,如果属性也会设置对应的字段。甚至可以通过的方法访问的函数。 、更轻量级的方式:映射到<>,<> 不想定义或者的话,可以考虑用这个,前提下和的类型都是一致的。 、另外一种方式:映射到类 这种方式好处是不需要生成代码,但也有一些问题,比如慢,比方式要慢一个数量级,

LUA简明教程

Lua 简明教程 2013-12-313:45|发布者:红黑魂|查看:2591|评论:0|原作者:陈皓|来自:酷壳网 摘要:这几天系统地学习了一下Lua 这个脚本语言,Lua 脚本是一个很轻量级的脚本,也是号称性能最高的脚本,用在很多需要性能的地方,比如:游戏脚本,nginx,wireshark 的脚本,当你把他的源码下下来编译后,你会发现解释器居... 这几天系统地学习了一下Lua 这个脚本语言,Lua 脚本是一个很轻量级的脚本,也是号称性能最高的脚本,用在很多需要性能的地方,比如:游戏脚本,nginx ,wireshark 的脚本,当你把他的源码下下来编译后,你会发现解释器居然不到200k ,这是多么地变态啊(/bin/sh 都要1M ,MacOS 平台),而且能和C 语言非常好的互动。我很好奇得浏览了一下Lua 解释器的源码,这可能是我看过最干净的C 的源码了。 我不想写一篇大而全的语言手册,一方面是因为已经有了(见本文后面的链接),重要的原因是,因为大篇幅的文章会挫败人的学习热情,我始终觉得好的文章读起来就像拉大便一样,能一口气很流畅地搞完,才会让人爽(这也是我为什么不想写书的原因)。所以,这必然又是一篇“入厕文章” ,还是那句话,我希望本文能够让大家利用上下班,上厕所大便的时间学习一个技术。呵呵。相信你现在已经在厕所里脱掉裤子露出屁股已经准备好大便了,那就让我们畅快地排泄吧…… 运行 首先,我们需要知道,Lua 是类C 的,所以,他是大小写字符敏感的。 下面是Lua 的Hello World 。注意:Lua 脚本的语句的分号是可选的,这个和GO 语言很类似。 你可以像python 一样,在命令行上运行lua 命令后进入lua 的shell 中执行语句。 也可以把脚本存成一个文件,用如下命令行来运行。 或是像shell 一样运行:

Lua中的元表和元方法

LUA中的元表和元方法 Posted on 2009-09-01 16:13 白耘阅读(227) 评论(0) 编辑收藏所属分类: Lua学习笔记 Lua中每个值都可具有元表。元表是普通的Lua表,定义了原始值在某些特定操作下的行为。你可通过在值的原表中设置特定的字段来改变作用于该值的操作的某些行为特征。例如,当数字值作为加法的操作数时,Lua检查其元表中的"__add"字段是否有个函数。如果有,Lua调用它执行加法。 我们称元表中的键为事件(event),称值为元方法(metamethod)。前述例子中的事件是"add",元方法是执行加法的函数。 可通过函数getmetatable查询任何值的元表。 可通过函数setmetatable替换表的元表。不能从Lua中改变其他类型的元表(除了使用调试库);必须使用C API才能做到。 表和完整的用户数据具有独立的元表(尽管多个表和用户数据可共享元表);每种其他类型的所有值共享一个元表。所以,所有数字共享一个元表,字符串也是,等等。 元表可以控制对象的数学运算、顺序比较、连接、取长、和索引操作的行为。元表也能定义用户数据被垃圾收集时调用的函数。Lua给这些操作的每一个都关联了称为事件的特定键。当Lua对某值执行其中一个操作时,检查该值是否含有元表以及相应的事件。如果有,与该键关联的值(元方法)控制Lua如何完成操作。 元表控制后面列举的操作。每个操作由相应的名字标识。每个操作的键是由其名字前缀两个下划线“__”的字符串;例如,操作“加(add)”的键是字符串"__add"。这些操作的语义通过一个Lua函数描述解释器如何执行操作作了更好的说明。 下面显示的Lua代码只是说明性的;真实的行为被硬编码到解释器中,并且比这里的模拟更加高效。这些描述中的所有函数(rawget、tonumber等等。)在§5.1中描述。特别一提,要获取给定对象的元方法,我们使用表达式

教程贴:教你自己编写DIY武将的AI(太阳神三国杀lua)

在cpp区发了那篇DIY教程贴之后,我转战到了lua区,发现大家都是再写lua武将的DIY,没有人关心AI的lua。在我看来,与cpp相比,lua来实现DIY的武将优点是安装卸载方便且不会影响cpp源代码的整洁,缺点是不能debug,通过设置断点来观察变量,在测试的过程中比较辛苦,还有就是偏于与系统耦合的技能比较难实现。这两天把AI部分的lua 代码看了一遍清楚了,除了身份判断部分,基本清楚了它的原理。鉴于lua武将DIY的教程和范例已经比较完善,这次我就把AI的编写简要的整理一下。附件中的内容是和这次教程相关的代码、相关武将的卡牌图片以及本帖的PDF版本。附件中有“侠”三武将的lua和AI,以及两个我DIY的娱乐武将的AI(娱乐武将用CPP实现的,由于有一个修改性别的技能改变了底层的Player类,因此无法用lua完美实现,所以就不提供代码了,有兴趣的同学可以和我交流)。 首先,AI的编写与lua技能的代码有很大关系,我用自己设计的两个武将和“侠”三武将做了实验并且完成了这五个武将的AI。在编写“侠”三武将的AI时遇到了一些问题,后来我把寒秋的代码优化了一下才解决了问题。附件里会有“侠”三武将的代码,一个是原版的,一个是我改进过的,大家可以对比下。(并没有冒犯的意思,纯学术上的交流)所以算是给广大lua的DIY爱好者们几条编程方面的建议吧。 1.写代码要整齐,缩进量要层层递进,保证代码的易读性 2.写触发技的时候,要清楚每个触发事件的原理,最好不要加入多余的触发事件,否 则可能引入异常的行为。当然,一般来说引入多余事件只是降低程序运行的效率罢了,对于神杀影响应该不大。 3.没有必要的时候不要重载can_trigger、enabled_at_play、enabled_at_response这些 函数。对于can_trigger这个函数,重载直接return true然后在on_trigger里判断玩家是否拥有该触发技和使用默认的can_trigger基本是一样的(因为can_trigger本身返回值就是触发者是否拥有该技能且触发者是否活着,貌似死人没法触发技能)。 4.如果一个触发技可以在多个时间下触发,在写on_trigger函数的时候大家请按照触 发的事件来写条件分支语句,这样逻辑会更加清晰一些。 5.尽量避免在视作技中使用askForCard这个函数,我来举个例子:如果一个视作技可 以把闪当作无中生有来使用,如果你不用askForCard,那么操作流程将是点击技能按钮à选择一张闪à点击确定当无中生有打出;但是如果使用了askForCard并且你装备了八卦阵,那么你点击技能按钮à系统提示你需要打出一张闪à使用八卦阵à判红à直接打出一张无中生有。一张牌当无中生有和零张牌当无中生有,知道区别了吧。 6.在触发技一定要使用askForSkillInvoke(player,self:objectName(),data),这里要注意第 三个参数data,它包含触发事件的详细信息,一般卖血技的是damage的结构体、无言那种是cardEffect结构体、烈弓是slashEffect结构体。这些data中的信息在写AI的时候十分重要,因此务必要加上以便于AI中完成复杂的判断。我之前写AI就是因为askForSkillInvoke(player,self:objectName())导致需要的变量总是空值,郁闷了很久。 7.触发技中askForCard之前最好加上askForSkillInvoke。对于人来说,如果不加 askForSkillInvoke,不想发动机能的时候直接点取消就行,加上了askForSkillInvoke 无非就是在提示是否使用XXX技能时多点一个确定罢了。但是对于AI的编写,如果不加askForSkillInvoke,那么这个技能对应的AI就要写在smart-ai.lua的SmartAI:askForCard里,有点像cpp中的系统耦合技,这对于代码的整洁还有AI的移植是不利的。但是加上askForSkillInvoke后,我们就可以单独的对这个选择写一个AI,消除了耦合。

太阳神三国杀lua教程

--大家好我是hypercross。 --从这个文件开始讲解DIY接口的用法。 --首先,这个文件说明DIY需要的文件及其结构。 --DIY是以module的形式存在的。每个Module即是一个UTF8格式的Lua文件(建议用notepad++编辑),包含如下格式的代码: module("extensions.moligaloo", package.seeall) -- 进入module。这里moligaloo这个词必须和文件名相同。 extension = sgs.Package("moligaloo") -- 创建扩展包对象。变量名必须为extension。参数名为扩展包的objectName,也是通常会使用的扩展包标识 shiqian = sgs.General(extension, "shiqian", "qun") -- 创建武将对象,这里我们的武将是时迁。关于武将属性的详细说明见reference文档。 shentou = sgs.CreateViewAsSkill{ --创建技能,技能种类为ViewAsSkill。这里的技能是“出牌阶段,你可以将任意一张梅花手牌当作顺手牵羊使用。” name = "shentou", n = 1, view_filter = function(self, selected, to_select) return to_select:getSuit() == sgs.Card_Club and not to_select:isEquipped() end, view_as = function(self, cards) if #cards == 1 then local card = cards[1] local new_card =sgs.Sanguosha:cloneCard("snatch", card:getSuit(), card:getNumber()) new_card:addSubcard(card:getId()) new_card:setSkillName(self:objectName()) return new_card end end }--关于技能的说明将是几乎所有其他帮助文件的重点。此处省略。 sgs.LoadTranslationTable{ ["shentou"] = "神偷", [":shentou"] = "你可以将你的梅花手牌当做顺手牵羊使用。", }

CEGUI中文教程

CEGUI从入门到精通开发必备知识

一: 1.你的第一个CEGUI程序 2.强烈建议仔细研究CEGUISample程序!因为那里介绍了它的一些基本 用法,其实最后在游戏当中出现的,也就是这些例子的变化而已。 3.这里我会引导你写一个第一个自己的简单的CEGUI程序,它使用 CEGUISampleHelper提供的框架,使用OpenGL渲染。 4.这是在CEGUI自己给的Sample程序基础上简化、简化、再简化得出的, 目的是让大家对CEGUI程序有一个简单明了的认识,其实就是这么简单。 里面只定义了一个背景,一个静态文本,写着“Hello!CEGUI”。 5.具体的,有几块重要的东西。有一些包含在框架里了,如下: 6.DefaultResourceProvider,这个是CEGUI的一个全局的东西,可以 在任何地方操作它的指针,但是一般只需要在一开始操作它。 7.在CEGuiOpenGLBaseApplication当中,你可以看见下面这样的代码, 这就是在使用DefaultResourceProvider的指针在设置资源的路径,你可以毫不客气地复制粘贴到你的工程里 8.CEGUI::DefaultResourceProvider* rp = static_cast 9.(CEGUI::System::getSingleton().getResourceProvider());

10. 11.rp->setResourceGroupDirectory("schemes", "../datafiles/schemes/"); 12.rp->setResourceGroupDirectory("imagesets", "../datafiles/imagesets/"); 13.rp->setResourceGroupDirectory("fonts", "../datafiles/fonts/"); 14.rp->setResourceGroupDirectory("layouts", "../datafiles/layouts/"); 15.rp->setResourceGroupDirectory("looknfeels", "../datafiles/looknfeel/"); 16.rp->setResourceGroupDirectory("lua_scripts", "../datafiles/lua_scripts/"); 17.下面是整个的代码: 18.#ifndef _TDemo0_h_ 19.#define _TDemo0_h_ 20. 21.#include "CEGuiSample.h" 22.#include "CEGUI.h" 23. 24.// 例子类 25.class TDemo0Sample : public CEGuiSample

谭浩强C语言教程WORD版

软件简介: 1C语言概述2 1.1C语言的发展过程2 1.2当代最优秀的程序设计语言2 1.3C语言版本2 1.4C语言的特点3 1.5面向对象的程序设计语言3 1.6C和C++3 1.7简单的C程序介绍4 1.8输入和输出函数5 1.9C源程序的结构特点6 1.10书写程序时应遵循的规则6 1.11C语言的字符集6 1.12C语言词汇7 1.13Turbo C 2.0集成开发环境的使用8 1.1 3.1Turbo C2.0简介和启动8 1.13.2Turbo C 2.0集成开发环境8 1.13.3File菜单9 1.13.4Edit菜单10 1.13.5Run菜单11 1.13.6Compile菜单12 1.13.7Project菜单13 1.13.8Options菜单14 1.13.9Debug菜单18 1.13.10Break/watch菜单19 1.13.11Turbo C 2.0的配置文件20 2程序的灵魂—算法1 2.1算法的概念1 2.2简单算法举例1 2.3算法的特性4 2.4怎样表示一个算法4 2.4.1用自然语言表示算法4 2.4.2用流程图表示算法4 2.4.3三种基本结构和改进的流程图8 2.4.4用N-S流程图表示算法9 2.4.5用伪代码表示算法10 2.4.6用计算机语言表示算法11 2.5结构化程序设计方法11 2 3数据类型、运算符与表达式1 3.1C语言的数据类型1 3.2常量与变量3

3.2.1常量和符号常量3 3.2.2变量3 3.3整型数据4 3.3.1整型常量的表示方法4 3.3.2整型变量5 3.4实型数据7 3.4.1实型常量的表示方法7 3.4.2实型变量8 3.4.3实型常数的类型9 3.5字符型数据9 3.5.1字符常量9 3.5.2转义字符9 3.5.3字符变量10 3.5.4字符数据在内存中的存储形式及使用方法10 3.5.5字符串常量11 3.5.6符号常量12 3.6变量赋初值12 3.7各类数值型数据之间的混合运算13 3.8算术运算符和算术表达式14 3.8.1C运算符简介14 3.8.2算术运算符和算术表达式15 3.9赋值运算符和赋值表达式17 3.10逗号运算符和逗号表达式18 3.11小结19 3.11.1C的数据类型19 3.11.2基本类型的分类及特点19 3.11.3常量后缀19 3.11.4常量类型19 3.11.5数据类型转换19 3.11.6运算符优先级和结合性20 3.11.7表达式20 4最简单的C程序设计—顺序程序设计1 4.1C语句概述1 4.2赋值语句3 4.3数据输入输出的概念及在C语言中的实现4 4.4字符数据的输入输出4 4.4.1putchar函数(字符输出函数)4 4.4.2getchar函数(键盘输入函数)5 4.5格式输入与输出5 4.5.1printf函数(格式输出函数)5 4.5.2scanf函数(格式输入函数)8 4.6顺序结构程序设计举例12 4 5分支结构程序1

XLua使用教程

xLua教程 Lua文件加载 一、执行字符串 最基本是直接用LuaEnv.DoString执行一个字符串,当然,字符串得符合Lua语法 比如:luaenv.DoString("print('hello world')") 完整代码见XLua\Tutorial\LoadLuaScript\ByString目录 但这种方式并不建议,更建议下面介绍这种方法。 二、加载Lua文件 用lua的require函数即可 比如:DoString("require 'byfile'") 完整代码见XLua\Tutorial\LoadLuaScript\ByFile目录 require实际上是调一个个的loader去加载,有一个成功就不再往下尝试,全失败则报文件找不到。 目前xLua除了原生的loader外,还添加了从Resource加载的loader,需要注意的是因为Resource只支持有限的后缀,放Resources下的lua文件得加上txt后缀(见附带的例子)。 建议的加载Lua脚本方式是:整个程序就一个DoString("require 'main'"),然后在main.lua加载其它脚本(类似lua脚本的命令行执行:lua main.lua)。 有童鞋会问:要是我的Lua文件是下载回来的,或者某个自定义的文件格式里头解压出来,或者需要解密等等,怎么办?问得好,xLua的自定义Loader可以满足这些需求。三、自定义Loader 在xLua加自定义loader是很简单的,只涉及到一个接口: public delegate byte[] CustomLoader(ref string filepath); public void LuaEnv.AddLoader(CustomLoader loader) 通过AddLoader可以注册个回调,该回调参数是字符串,lua代码里头调用require时,参数将会透传给回调,回调中就可以根据这个参数去加载指定文件,如果需要支持调试,需要把filepath修改为真实路径传出。该回调返回值是一个byte数组,如果为空表示该loader 找不到,否则则为lua文件的内容。

lua简易教程

Lua脚本语法说明(修订) Posted on 2006-08-04 11:39 沐枫阅读(3512) 评论(9)编辑收藏引用网摘所属分类: C++ Lua脚本语法说明(增加lua5.1部份特性) Lua 的语法比较简单,学习起来也比较省力,但功能却并不弱。 所以,我只简单的归纳一下Lua的一些语法规则,使用起来方便好查就可以了。估计看完了,就懂得怎么写Lua 程序了。 在Lua中,一切都是变量,除了关键字。 I. 首先是注释 写一个程序,总是少不了注释的。 在Lua中,你可以使用单行注释和多行注释。 单行注释中,连续两个减号"--"表示注释的开始,一直延续到行末为止。相当于C++语言中的"//"。 多行注释中,由"--[["表示注释开始,并且一直延续到"]]"为止。这种注释相当于C语言中的"/*...*/"。在注释当中,"[["和"]]"是可以嵌套的(在lua5.1中,中括号中间是可以加若干个"="号的,如[==[ ... ]==]),见下面的 字符串表示说明。 II. Lua编程 经典的"Hello world"的程序总是被用来开始介绍一种语言。在Lua中,写一个这样的程序很简单: print("Hello world") 在Lua中,语句之间可以用分号";"隔开,也可以用空白隔开。一般来说,如果多个语句写在同一行的话,建议总是用分号隔开。 Lua 有好几种程序控制语句,如:

注意一下,for的循环变量总是只作用于for的局部变量;当省略步进值时,for循环会使用1作为步进值。 使用break可以用来中止一个循环。 相对C语言来说,Lua有几个地方是明显不同的,所以面要特别注意一下: .语句块 语句块在C中是用"{"和"}"括起来的,在Lua中,它是用do 和end 括起来的。比如: do print("Hello") end 可以在函数中和语句块中定局部变量。 .赋值语句 赋值语句在Lua被强化了。它可以同时给多个变量赋值。 例如: a,b,c,d=1,2,3,4 甚至是: a,b=b,a -- 多么方便的交换变量功能啊。 在默认情况下,变量总是认为是全局的。假如需要定义局部变量,则在第一次赋值的时候,需要用local说明。比如: local a,b,c = 1,2,3 -- a,b,c都是局部变量 .数值运算 和C语言一样,支持+, -, *, /。但Lua还多了一个"^"。这表示指数乘方运算。比如2^3 结果为8, 2^4结果为16。 连接两个字符串,可以用".."运处符。如: "This a " .. "string." -- 等于"this a string"

C语言入门教程

51 单片机 C 语言入门教程(磁动力工作室) 51 单片机 C 语言学习杂记
学习单片机实在不是件易事,一来要购买高价格的编程器,仿真器,二来要学习编程语 言,还有众多种类的单片机选择真是件让人头痛的事.在众多单片机中 51 架构的芯片风行 很久,学习资料也相对很多,是初学的较好的选择之一.51 的编程语言常用的有二种,一 种是汇编语言,一种是 C 语言.汇编语言的机器代码生成效率很高但可读性却并不强,复 杂一点的程序就更是难读懂,而 C 语言在大多数情况下其机器代码生成效率和汇编语言相 当,但可读性和可移植性却远远超过汇编语言,而且 C 语言还可以嵌入汇编来解决高时效 性的代码编写问题.对于开发周期来说,中大型的软件编写用 C 语言的开发周期通常要小 于汇编语言很多.综合以上 C 语言的优点,我在学习时选择了 C 语言.以后的教程也只是 我在学习过程中的一些学习笔记和随笔,在这里加以整理和修改,希望和大家一起分享,一 起交流,一起学习,一起进步. *注:可以肯定的说这个教程只是为初学或入门者准备的,笔者本人也只是菜鸟一只, 有望各位大侠高手指点错误提出建议. 明浩 2003-3-30 pnzwzw@https://www.doczj.com/doc/a48565187.html,
第一课 建立您的第一个 C 项目
使用 C 语言肯定要使用到 C 编译器,以便把写好的 C 程序编译为机器码,这样单片机 才能执行编写好的程序.KEIL uVISION2 是众多单片机应用开发软件中优秀的软件之一, 它支持众多不同公司的 MCS51 架构的芯片,它集编辑,编译,仿真等于一体,同时还支持, PLM,汇编和 C 语言的程序设计,它的界面和常用的微软 VC++的界面相似,界面友好,易 学易用,在调试程序,软件仿真方面也有很强大的功能.因此很多开发 51 应用的工程师或 普通的单片机爱好者,都对它十分喜欢. 以上简单介绍了 KEIL51 软件,要使用 KEIL51 软件,必需先要安装它.KEIL51 是一个 商业的软件,对于我们这些普通爱好者可以到 KEIL 中国代理周立功公司的网站上下载一份 能编译 2K 的 DEMO 版软件,基本可以满足一般的个人学习和小型应用的开发. (安装的方 法和普通软件相当这里就不做介绍了) 安装好后,您是不是迫不及待的想建立自己的第一个 C 程序项目呢?下面就让我们一 起来建立一个小程序项目吧.或许您手中还没有一块实验板,甚至没有一块单片机,不过没 有关系我们可以通过 KEIL 软件仿真看到程序运行的结果. 首先当然是运行 KEIL51 软件.怎么打开?噢,天!那您要从头学电脑了.呵呵,开个 玩笑,这个问题我想读者们也不会提的了:P.运行几秒后,出现如图 1-1 的屏幕.
图 1-1 启动时的屏幕
-1-

Lua 5.1 虚拟机指令简明手册

A No-Frills Introduction to Lua5.1VM Instructions Lua5.1虚拟机指令简明手册 作者Kein-Hong Man,esq. 版本0.1,20060313 Contents目录 1Introduction序言2 2Lua Instruction Basics Lua指令基础3 3Really Simple Chunks十分简单的程序块5 4Lua Binary Chunks Lua二进制程序快7 5Instruction Notation指令记法15 6Loading Constants加载常量16 7Upvalues and Globals Upvalue和全局变量20 8Table Instructions表指令22 9Arithmetic and String Instructions算术和字符串指令23 10Jumps and Calls跳转和调用28 11Relational and Logic Instructions关系和逻辑指令35 12Loop Instructions循环指令42 13Table Creation表创建48 14Closures and Closing创建和结束闭包52 15Comparing Lua5.0.2and Lua5.1比较Lua5.0.2和Lua5.156 16Digging Deeper深入探究57 17Acknowledgements致谢57 18ChangeLog&ToDos变更纪录&待做的57 “A No-Frills Introduction to Lua 5.1VM Instructions”is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License 2.0.You are free to copy, distribute and display the work,and make derivative works as long as you give the original author credit,you do not use this work for commercial purposes,and if you alter,transform, or build upon this work,you distribute the resulting work only under a license identical to -1-

相关主题
文本预览
相关文档 最新文档