获取点击屏幕坐标

 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. iview table配合Tooltip使用的时候 气泡错位的问题

    Tooltip 气泡错位 点击table的单元格,实现遮盖文字的预览功能,但是气泡会发生偏移,看了Tooltip的样式发现 气泡是绝对定位, 想到子绝父相,于是给表格的td添加相对定位的功能,结果能解 ...

  2. Application.HandleMessage与Application.ProcessMessage

    HandleMessage: HandleMessage中断应用程序的执行,以便Windows可以在将控制权返回给应用程序之前处理来自Windows消息队列的单个消息. 如果消息队列为空,则Handl ...

  3. pandas的数据结构--Series创建使用

    # 1. 使用Series创建一个空的系列:import pandas as pds=pd.Series()print(s)输出结果为:Series([], dtype: float64) # 2. ...

  4. SQL相关知识

    SQL(Structure Query Language)  结构化查询语言,它是关系型数据库的应用语言,由IBM上世纪70年代开发出来的.     SQL语言规范       语句以;封号结束   ...

  5. leetcode 875. 爱吃香蕉的珂珂

    珂珂喜欢吃香蕉.这里有 n 堆香蕉,第 i 堆中有 piles[i] 根香蕉.警卫已经离开了,将在 h 小时后回来. 珂珂可以决定她吃香蕉的速度 k (单位:根/小时).每个小时,她将会选择一堆香蕉, ...

  6. css中双冒号和单冒号区别

    :--是指的伪类 ::--是指的伪元素 1.字面意思: 伪类,1.css中有类选择器,某些元素并未定义类名,就可以通过伪类赋予样式,如:[:nth-child(n)]:2.伪类可以应用于元素执行某种状 ...

  7. 【xUtils框架问题】xUtils继承基类的x.view().inject(this)绑定点击事件@Event无效

    由于看得教程里的xUtils比较老了,不知道什么版本的. 还是使用ViewUtils.inject()进行绑定反射的,使用@OnClick进行点击监听绑定的. 3.9.0版本的xUtils使用: x. ...

  8. 2月28日Android开发学习

    界面显示与逻辑处理 Android Studio利用XML标记描绘应用界面,使用java代码书写程序逻辑. 把App界面设计与代码逻辑分开的好处 使用XML文件描述App界面,可以很方便地在Adroi ...

  9. php 解密 java des 密文

    背景 对方系统java des 加密, 我们用 php 解密 模式基本介绍 ECB模式:电子密本方式,JAVA封装的DES算法的默认模式,就是将数据按照8个字节一段进行DES加密或解密得到一段8个字节 ...

  10. Jmeter检查点

    一.Response Assertion(响应断言) 1. 添加响应断言 对Web请求的响应结果进行验证,Response Assertion配置参数 2. 输入需要匹配的字符串 此处对于访问Baid ...