首页 > 其他分享 >lua的一些封装方法

lua的一些封装方法

时间:2023-02-27 16:55:30浏览次数:42  
标签:function end 方法 self data lua 封装 csv local

获取点击屏幕坐标

 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

 

     

标签:function,end,方法,self,data,lua,封装,csv,local
From: https://www.cnblogs.com/lockyluo/p/17160360.html

相关文章

  • 1 后台日志封装、 2 前后端分离的rbac项目演示、 3 全局异常处理封装、 4 封装Respons
    目录1后台日志封装2前后端分离的rbac项目演示3全局异常处理封装4封装Response5luffy数据库创建5.1创建用户创建库5.2使用项目连接库6软件开发模式7User模块用户表......
  • 实战项目2-后端封装配置处理
    后台日志封装以后项目一定需要记录日志一般日志都可以打印到控制台日志可以写道到日志文件中日志存到某个库所有项目日志统一管理(sentry:django写的服务,收集日志的......
  • 结构光自标定方法综述
    来源:《传感器与微系统》作者:张美航,张华,鄢威编辑:东岸因为@一点人工一点智能原文:​​结构光自标定方法综述​​00 引言三维重构是计算机视觉核心问题之一,相机-投影仪结构光......
  • windows环境中,pm2下载成功后却显示不是内部或外部命令解决方法
    windows环境中,pm2下载成功后却显示不是内部或外部命令解决方法      一开始遇见这种情况很是头疼,百度了很多pm2下载成功却显示不是内部命令的原因,结果都不尽人意,......
  • 类-方法
    类-方法方法是在类中定义的且包装在类中的子程序,用于执行类的操作,完成类的任务,方法按功能分有6种类方法。(1)过程方法声明格式为:Procedure过程名(参数列表);(2)函数方......
  • Java方法:方法的重载、命令行传参、递归
    Java方法:方法的重载、命令行传参、递归方法的重载重载就是在一个类中,有相同的函数名称,但是形参不同的函数。方法重载的规则:方法名称必须相同;参数列表必须不同(个......
  • 如何避免鼠标移入子级触发父级的移出事件(两种方法)
    我们经常会遇到一个问题,我们使用onmouseover和onmouseout控制鼠标的的移入移出时,如果是将鼠标从父级移动到子级的时候,会触发子级的冒泡事件,导致父级先触发移出事件后立即触......
  • react封装图片上传组件
    支持表单受控和非受控使用,基于antdupload进行的二次封装,使用场景如下图: 1.组件文件夹  2.index.tsx贴代码importReact,{useEffect,useMemo,useState}f......
  • Java方法的定义
    前言经过前面两篇关于面向对象、类和对象的文章,壹哥相信你现在对面向对象已经有了基本的了解。我们知道,在一个类中,包括属性和行为两大核心要素。我们之前已经给大家讲解了......
  • vscode跟踪vue代码方法
    首先安装插件同时打开上面的右边的齿轮图标,就是打开文件launch.json{//UseIntelliSensetolearnaboutpossibleattributes.//Hovertoviewdescriptionsof......