获取点击屏幕坐标

 1 function getTouchPosition()
2 local locationX, locationY
3
4 local listener = cc.EventListenerTouchOneByOne:create()
5 listener:setSwallowTouches(true)
6 listener:registerScriptHandler(function(touch, event)
7 locationX, locationY = touch:getLocation().x, touch:getLocation().y
8 return true
9 end, cc.Handler.EVENT_TOUCH_BEGAN)
10
11 cc.Director:getInstance():getEventDispatcher():addEventListenerWithSceneGraphPriority(listener, cc.Director:getInstance():getRunningScene())
12
13 cc.Director:getInstance():getRunningScene():runAction(cc.Sequence:create(cc.DelayTime:create(0.1), cc.CallFunc:create(function() cc.Director:getInstance():getEventDispatcher():removeEventListener(listener) end)))
14
15 return locationX, locationY
16 end

  

创建了一个事件监听器,并将其注册到事件分发器中。
在监听器的 EVENT_TOUCH_BEGAN 事件中,我们仍然通过调用 touch:getLocation() 方法获取点击位置的x和y坐标,并将它们存储在locationX和locationY变量中。
最后,我们仍然添加了一些代码来确保监听器被及时地从事件分发器中删除,以避免内存泄漏。
orc文字识别并进行匹配获取文字坐标
需要先安装 tesseract 
 1 local tess = require("tesseract")
2 tess.init("eng")
3
4 local function findText(imagePath, text)
5 local result = tess.recognize(imagePath)
6 for i, line in ipairs(result.lines) do
7 local startIndex, endIndex = string.find(line.text, text)
8 if startIndex ~= nil then
9 local charWidth = line.width / #line.text
10 local x = line.x + (startIndex - 1) * charWidth + charWidth / 2
11 local y = line.y + line.height / 2
12 return {x = x, y = y}
13 end
14 end
15 return nil
16 end
17
18 local function searchAndPrint(imagePath, text)
19 local result = findText(imagePath, text)
20 if result ~= nil then
21 print(string.format("Found text \"%s\" at position (%d, %d)", text, result.x, result.y))
22 return result
23 else
24 print(string.format("Text \"%s\" not found", text))
25 return nil
26 end
27 end
28
29 searchAndPrint("test.png", "Hello")
通过监听键盘点击ctrl+1、ctrl+2、ctrl+3、ctrl+4、ctrl+5事件,可以随时开始、停止、继续和重新开始的循环任务
 1 -- 定义任务函数
2 local function myTask()
3 print("这是一个任务")
4 end
5
6 -- 定义任务控制模块
7 local taskCtrl = {
8 interval = 1,
9 running = false,
10 thread = nil,
11 start = function(self)
12 self.running = true
13 self.thread = coroutine.create(function()
14 while self.running do
15 myTask()
16 os.sleep(self.interval)
17 end
18 end)
19 coroutine.resume(self.thread)
20 end,
21 stop = function(self)
22 self.running = false
23 if self.thread then coroutine.yield(self.thread) end
24 self.thread = nil
25 end,
26 resume = function(self)
27 if not self.running then self:start()
28 elseif self.thread then coroutine.resume(self.thread) end
29 end,
30 restart = function(self) self:stop() self:start() end
31 }
32
33 -- 监听键盘事件
34 local keys = {"1","2","3","4","5"}
35 for _, key in ipairs(keys) do
36 keyboard.addHotkey("ctrl+"..key, function()
37 print("按下了 Ctrl+"..key)
38 if taskCtrl[key] then taskCtrl[key](taskCtrl) else os.exit() end
39 end)
40 end
 
读取和写入本地csv文件
 1 local csv = require("csv")
2
3 -- 从 CSV 文件中读取数据
4 local data = csv.open("data.csv"):read()
5
6 -- 输出读取到的数据
7 for i, record in ipairs(data) do
8 for j, field in ipairs(record) do
9 print(field)
10 end
11 end
12
13 -- 将数据写入到 CSV 文件中
14 csv.open("data.csv", "w"):write({
15 {"id", "name", "age"},
16 {1, "John", 30},
17 {2, "Jane", 25},
18 {3, "Bob", 45}
19 })
20
21
22
23
24 --------版本二
25 local csv = require("csv")
26
27 -- 读取 CSV 文件数据
28 local function read_csv(file)
29 local data = csv.open(file):read()
30 return data
31 end
32
33 -- 输出 CSV 文件数据
34 local function print_csv(data)
35 for i, record in ipairs(data) do
36 for j, field in ipairs(record) do
37 print(field)
38 end
39 end
40 end
41
42 -- 写入 CSV 文件数据
43 local function write_csv(file, data)
44 local writer = csv.open(file, {headers=false})
45 writer:write(data)
46 writer:close()
47 end
48
49 -- 读取 CSV 文件数据
50 local data = read_csv("data.csv")
51
52 -- 输出 CSV 文件数据
53 print_csv(data)
54
55 -- 写入 CSV 文件数据
56 write_csv("data.csv", {
57 {"id", "name", "age"},
58 {"1", "John", "30"},
59 {"2", "Jane", "25"},
60 {"3", "Bob", "45"},
61 })
遍历时获取数据表中第一行第二个值
1 local second_value = data[1][2]
2
3
4 for i, record in ipairs(data) do
5 local second_value = record[2]
6 -- do something with second_value
7 end
 
 
 

lua的一些封装方法的更多相关文章

  1. Lua常用封装方法

    Lua 获取随机值 --获取随机值,指定上限和下限 function getRandom(min,max) -- 接收一个整数n作为随即序列的种子 math.randomseed(os.time()) ...

  2. C++实现对lua访问的封装

    这是一个几年前写的对lua的访问封装,当时的项目仅提供了最基本的lua访问接口:调用lua函数,向lua注册标准格式的C++函数. 本来我想引进luabind,但luabind相对又过于复杂,并不是所 ...

  3. js面向对象的封装方法,【案例】

    封装方法: /** * @矩形canvas库 * @authors Shimily (275766400@qq.com) * @date 2016-12-28 10:30:51 * @version ...

  4. Lua 调用 Opencv 的方法

    Lua 调用 Opencv 的方法 最近想用 Lua 调用 Opencv 进行相关像素级操作,如:bitwise_and 或者 bitwise_or,从而完成图像 IoU 的计算. 那么,怎么用 Lu ...

  5. Javascript 封装方法

    基本封装方法 请看下面的例子: var Person = function(name,age){ this.name = name; this.age = age || "未填写" ...

  6. [论文笔记] 一种Java遗留系统服务化切分和封装方法 (计算机学报, 2009)

    李翔,怀进鹏,曾晋,高鹏. 一种Java遗留系统服务化切分和封装方法. 计算机学报, 32(9), 2009, p1084-1815 (gs:5) 1. 本文研究从Java遗留系统中切分并封装出Web ...

  7. 分享几个Javascript 封装方法

    基本封装方法 请看下面的例子: var Person = function(name,age){ this.name = name; this.age = age || "未填写" ...

  8. lua package path 设置方法

    lua package path 设置方法: 添加环境变量LUA_PATH="/add_path/?.lua;;" 1.add_path为新添加的目录: 2.一定要添加双引号: 3 ...

  9. iOS常用的封装方法

    做开发也有一段时间了,看了好多大神的代码,总体感觉他们写的代码简洁,好看,然而在对比下我写的代码,混乱,无序,简直不堪入目啊! 总体来说大神们的代码封装的都比较好,对一个项目要重复用到的代码他们都会封 ...

  10. JavaScrpt常用的封装方法

    1.闭包封装.在这个封装方法中,所有的实例成员都共享属性和方法, 使得所有得方法和属性都私有且对象间共享 (function ($) { var Person = function(name) { r ...

随机推荐

  1. centos-7实现批量ping

    批量ping 脚本 新接手了一个项目,10多个网段,500多机器,看自己机器可以连上多少服务器,一个个ping不符合我们的作风,因此百度了下大神的脚本,按自己的风格修改了,于是有了如下的脚本. 脚本如 ...

  2. Git ignore 失效 忽略已经提交推送远程的文件不生效

    因为这个文件已经被纳入版本管理中了 所以需要删掉. 1.先把需要忽略的文件暂存下来.再到.gitignore 添加要忽略的文件的路径 2.再删除本地的缓存 在 git bash 执行 git rm - ...

  3. Pytest Fixture(一)

    Fixture 是一些函数,pytest 会在执行测试函数之前(或之后)加载运行它们.我们可以用它做一些事情,比如数据库的链接操作之类的 import pytest @pytest.fixture() ...

  4. git rebase之abort,continue,skip

    git rebase --abort 会放弃合并,回到rebase操作之前的状态,之前的提交的不会丢 git rebase --skip 会将引起冲突的commit丢弃掉 git rebase --c ...

  5. 「SOL」NOI2017Day2 T1T2

    就当我没做过这套题 而且 T3 也不会 Day2 A. 游戏 > Link 游戏 - LOJ 做过 2-sat 的读者应该能够一眼秒出这道题的正解 -- \(\mathcal O(2^d)\) ...

  6. module 'tensorflow_core._api.v2.config' has no attribute 'experimental_list_devices'

    module 'tensorflow_core._api.v2.config' has no attribute 'experimental_list_devices' kearsPython 报错如 ...

  7. git拉取远程主支内容,在本地进行修改后,重新提交到新建分支的过程

    git拉取远程主支内容,在本地进行修改后,重新提交到新建分支的过程 在本地找一个干净的文件夹 git  init  进行初始化 git clone 复制拉取远程的地址 在文件夹中打开,进入复制下来的项 ...

  8. nmap扫描

    Nmap扫描 学习老师发的链接中的指令:https://www.cnblogs.com/nmap/p/6232207.html 下载了nmap软件 根据教学中的操作查找虚拟机的IP地址 并用主机对其扫 ...

  9. InnoDB的全文检索

    InnoDB的全文检索 注:全文为MySQL官网5.7的文档(MySQL 8.0的文档与此几乎一致) MySQL 5.6 不支持中.日.韩语,因为无法对其分词,5.7版本引入NGram(基于字符)对中 ...

  10. formidable处理文件上传的细节

    koa在请求体的处理方面依赖于通用插件koa-bodyparser或者koa-body,前者比较小巧,内部使用了co-body库,可以处理一般的x-www-form-urlencoded格式的请求,但 ...