CN104317578A - 基于引擎Lua脚本应用和引擎与Lua脚本相互调用方法及装置 - Google Patents
基于引擎Lua脚本应用和引擎与Lua脚本相互调用方法及装置 Download PDFInfo
- Publication number
- CN104317578A CN104317578A CN201410537544.1A CN201410537544A CN104317578A CN 104317578 A CN104317578 A CN 104317578A CN 201410537544 A CN201410537544 A CN 201410537544A CN 104317578 A CN104317578 A CN 104317578A
- Authority
- CN
- China
- Prior art keywords
- list
- engine
- lua script
- event message
- event
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000013515 script Methods 0.000 title claims abstract description 151
- 238000000034 method Methods 0.000 title claims abstract description 35
- 230000005540 biological transmission Effects 0.000 claims description 81
- 238000001914 filtration Methods 0.000 claims description 22
- 238000012545 processing Methods 0.000 claims description 7
- 238000003780 insertion Methods 0.000 claims 2
- 230000037431 insertion Effects 0.000 claims 2
- 230000006870 function Effects 0.000 abstract description 106
- 230000008878 coupling Effects 0.000 abstract description 6
- 238000010168 coupling process Methods 0.000 abstract description 6
- 238000005859 coupling reaction Methods 0.000 abstract description 6
- 230000008569 process Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 7
- 238000004364 calculation method Methods 0.000 description 4
- 230000002155 anti-virotic effect Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 239000008358 core component Substances 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000009434 installation Methods 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 238000012544 monitoring process Methods 0.000 description 2
- 238000003860 storage Methods 0.000 description 2
- 240000004859 Gamochaeta purpurea Species 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 239000012141 concentrate Substances 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Landscapes
- Stored Programmes (AREA)
- Telephonic Communication Services (AREA)
Abstract
本发明实施例公开了一种基于引擎Lua脚本应用和引擎与Lua脚本相互调用方法及装置,所述的基于引擎Lua脚本应用方法,包括:在Lua脚本中注册所有事件;在引擎中定义发送列表和接收列表;插入事件消息及该事件消息对应的回调函数到接收列表;插入事件消息到发送列表中;采用本实施例所提供的技术方案,能够封装引擎并通过提供相应的接口供Lua脚本与引擎进行交互,避免引擎与Lua脚本中的事件嵌套调用,有效的降低引擎中各个模块之间的耦合度。由于其独立性,同时也可以从游戏中分离应用与其他的多款游戏中,有利于提高开发的效率,也方便游戏的升级和更新。
Description
技术领域
本发明涉及计算机软件领域,尤其涉及一种基于引擎Lua脚本应用和引擎与Lua脚本相互调用方法及装置。
背景技术
引擎(Engine)是电子平台上开发程序或系统的核心组件。利用引擎,开发者可迅速建立、铺设程序所需的功能,或利用其辅助程序的运转。一般而言,引擎是一个程序或一套系统的支持部分。常见的程序引擎有游戏引擎、搜索引擎、杀毒引擎等。
在游戏中,玩家所体验到的剧情、关卡、美工、音乐、操作等内容都是由游戏的引擎直接控制的,它扮演着中场发动机的角色,把游戏中的所有元素捆绑在一起,在后台指挥它们同时、有序地工作。简单地说,引擎就是“用于控制所有游戏功能的主程序,从计算碰撞、物理系统和物体的相对位置,到接受玩家的输入,以及按照正确的音量输出声音等等。”
Lua是一个小巧的脚本语言。该语言的设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua脚本可以很容易的被C/C++代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。Lua提供了非常易于使用的扩展接口和机制,几乎在所有操作系统和平台上都可以编译和运行。
在程序开发中,一部分事件会注册在Lua脚本中,另一部分则注册在引擎中,由系统在执行中执行嵌套调用。在程序修改调试时,由于事件函数经常在Lua脚本与引擎之间相互调用,杂乱无章、会使程序员感觉无从下手;此外,现有的程序开发周期较短,后期维护升级次数较多,事件注册分散在Lua脚本与引擎中会给升级维护带来极大的麻烦。
有鉴于此,如何能将引擎封装并提供的相应接口使得Lua脚本与引擎之间能够相互调用是当前所要解决的问题。
发明内容
本发明的目的在于提出一种基于引擎Lua脚本应用方法和Lua脚本与引擎相互调用的方法及装置,利用LUA脚本编写游戏上层逻辑事件处理机制和UI(界面设计)部分事件,能够封装引擎并通过提供相应的接口供Lua脚本与引擎进行交互,避免引擎与Lua脚本中的事件嵌套调用,有效的降低引擎中各个模块之间的耦合度,由于其独立性,同时也可以从游戏中分离应用与其他的多款游戏中,有利于提高开发的效率,也方便游戏的升级和更新。
第一方面,本发明实施例提供了一种基于引擎高效的Lua脚本应用方法,包括:
在Lua脚本中注册所有事件;
在引擎中定义发送列表和接收列表;
插入事件消息及该事件消息对应的回调函数到接收列表;
插入事件消息到发送列表中;
第二方面,本发明实施例提供了一种基于引擎高效的Lua脚本应用的装置,包括:
注册单元,用于在Lua脚本中注册所有事件;
定义单元,用于在引擎中定义发送列表和接收列表;
接收列表插入单元,用于插入事件消息及该事件消息对应的回调函数到接收列表;
发送列表插入单元,用于插入事件消息到发送列表中;
采用本实施例所提供的技术方案,能够封装引擎并通过提供相应的接口供Lua脚本与引擎进行交互,避免引擎与Lua脚本中的事件嵌套调用,有效的降低引擎中各个模块之间的耦合度。
第三方面,本发明实施例提供了一种Lua脚本与引擎相互调用的方法,包括:
在Lua脚本中注册所有事件;
在引擎中定义发送列表和接收列表;
插入事件消息及该事件消息对应的回调函数到接收列表;
插入事件消息到发送列表中;
遍历发送列表,确定接收列表与发送列表事件名相同,调用接收列表的该事件的回调函数。
第四方面,本发明实施例还提供了一种Lua脚本与引擎相互调用的装置,包括:
注册单元,用于在Lua脚本中注册所有事件;
定义单元,用于在引擎中定义发送列表和接收列表;
接收列表插入单元,用于插入事件消息及该事件消息对应的回调函数到接收列表;
发送列表插入单元,用于插入事件消息到发送列表中;
遍历单元,用于遍历发送列表;
调用处理单元,用于确定接收列表与发送列表事件名相同,调用接收列表的该事件的回调函数。
采用本实施例所提供的技术方案,能够实现在引擎封装的基础上,通过相应的接口使Lua脚本与引擎进行交互,借助Lua的轻量级、可拓展的优点降低开发过程中开发成本及风险,提高了开发的效率。
附图说明
图1是本发明第一实施例提供的基于引擎Lua脚本应用方法的流程图;
图2是本发明第二实施例提供的基于引擎Lua脚本应用方法的流程图;
图3是本发明第三实施例提供的基于引擎Lua脚本应用方法的流程图;
图4是本发明第四实施例提供的基于引擎Lua脚本应用装置的结构图;
图5是本发明第五实施例提供的Lua脚本与引擎相互调用方法的流程图;
图6是本发明第六实施例提供的Lua脚本与引擎相互调用装置的结构图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。
图1示出了本发明的第一实施例。
图1是本发明第一实施例提供的引擎与Lua脚本相互调用的方法的流程图,所述的引擎与Lua脚本相互调用的方法包括:
步骤S101,在Lua脚本中注册所有事件。
Lua脚本是基于事件的驱动,这种事件可以是控制角色运动、键盘、鼠标、网络、自定义事件消息等。Lua最流行的应用场景是在游戏中作为处理逻辑的脚本,即用来编写游戏的任务脚本,以实现游戏的可配置性和可扩展性。例如与游戏中的相应剧本发展、故事情节等都是由相应的脚本系统来完成。
在Lua脚本中利用关键字regevent注册事件,这样可以保证Lua脚本调用C++函数,其定义格式为:
regevent(注册事件名,事件回调函数,过滤参数)
其中注册事件名为:事件消息名,例如鼠标事件、键盘事件、网络事件等,事件回调函数,与注册事件名相对应,每一个事件消息对应一个事件回调函数。过滤参数,触发该消息事件需要满足一定的条件才可以回调消息函数,例如:当触发按下键盘A键时,才会回调按下A键时的回调函数,而不是只要有键盘的任意键按下就触发的。Lua采用通用类型的表(table),用它可以实现数组、哈希表、集合、对象语言内置模式匹配。
通过在Lua脚本中注册全部的事件,将与游戏中设定剧本的事件全部放在Lua脚本中,不必在引擎中编写相应的复杂且臃肿的硬编码,可以保持引擎内核的完整性,便于封装引擎。
步骤S102,在引擎中定义发送列表和接收列表。
引擎(Engine)是电子平台上开发程序或系统的核心组件。利用引擎,开发者可迅速建立、铺设程序所需的功能,或利用其辅助程序的运转。一般而言,引擎是一个程序或一套系统的支持部分。常见的程序引擎有游戏引擎,搜索引擎,杀毒引擎等。
游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开始。
游戏引擎是一个为运行某一类游戏的机器设计的能够被机器识别的代码(指令)集合。游戏引擎则是按游戏设计的要求顺序的调用这些资源。在游戏引擎中引入脚本系统主要是灵活的控制游戏的,还能对其进行及时拓展和升级。对于杀毒引擎和搜索引擎来说,引入脚本可以方便的拓展其所对应的功能。
首先在引擎中定义两个表,分别为发送列表与接收列表,发送列表用以存储事件消息的相应名称,接收列表用以存储事件消息的相应名称及该事件所对应的回调函数。
引擎包括起控制作用的代码,可以采用C语言、C++或者VB等多种语言来实现,可以通过上述语言实现定义发送列表和接收列表。
步骤S103,插入事件消息及该事件消息对应的回调函数到接收列表。
当加载LUA脚本时,可以获取到相应事件消息的回调函数,并将该事件消息的名称及该事件消息所调用的事件函数插入到接收列表中。有些回调函数还会有相应的过滤参数,一些触发该消息事件还需要满足一定的条件才可以回调消息函数,例如:当触发按下键盘A键时,才会回调按下A键时的回调函数,而不是只要有键盘的任意键按下就触发的。对于包括过滤参数的回调函数,也应该将该回调函数对应的过滤参数一并插入到接收列表中。加载Lua脚本文件有很多,每个文件都有一个或者多个事件消息,会统一的把这些消息插入到接收列表中。
步骤S104,插入事件消息到发送列表中。
Lua脚本是基于事件的驱动,这种事件可以是控制角色运动、键盘、鼠标、网络、自定义事件消息等,把事件消息的相应标识插入到发送列表中,在本实施例中,事件消息的相应标识为事件消息的名称。每一个事件消息都对应一个事件名称,当触发相应的事件时,把事件消息的相应名称插入到发送列表中。
本实施例通过在Lua脚本中注册所有事件,引擎中定义发送列表和接收列表;插入事件消息到发送列表中;插入事件消息及该事件消息对应的回调函数到接收列表。通过上述步骤,与游戏中设定剧本的事件全部放在Lua脚本中,不必在引擎中编写相应的复杂且臃肿的硬编码,可以保持引擎内核的完整性,便于封装引擎;在引擎中定义发送和接收列表,使得Lua脚本中的事件与引擎中的回调函数建立相应的联系,方便Lua脚本与引擎进行交互。
图2示出了本发明的第二实施例。
图2是本发明第二实施例提供的引擎与Lua脚本相互调用的方法的流程图,本实施例以第一实施例为基础,包括:
步骤S201,在Lua脚本中注册所有事件.
在Lua脚本中利用关键字regevent注册事件,这样可以保证Lua脚本调用C++函数,其定义格式为:
regevent(注册事件名,事件回调函数,过滤参数)
步骤S202,在引擎中定义发送列表和接收列表。
在引擎中定义两个表,分别为发送列表与接收列表,发送列表用以存储事件消息的相应名称,接收列表用以存储事件消息的相应名称及该事件所对应的回调函数。
步骤S203,加载Lua脚本;
步骤S204,调用regevent()获取该消息事件的回调函数;
通过Lua脚本中的regevent()获取该事件消息所对应的回调函数。加载Lua脚本文件有很多,每个文件都有一个或者多个事件消息,会统一的把这些事件消息插入到接收列表中。
步骤S205,插入事件消息及该事件消息对应的回调函数到接收列表。
将上一步骤所获取的该事件消息的名称及该事件消息所调用的事件函数插入到接收列表中,对于包括过滤参数的回调函数,也应该将该回调函数对应的过滤参数一并插入到接收列表中。
步骤S206,插入事件消息到发送列表中。
当触发相应的消息事件时,把事件消息的相应标识插入到发送列表中,在本实施例中,事件消息的相应标识为事件消息的名称。
本实施例通过在引擎中定义发送列表与接收列表,并将事件消息的相应名称插入到发送列表中,通过加载Lua脚本将对应的将事件消息所对应的名称及回调函数插入到接收列表中;使得Lua脚本与引擎之间通过事件消息建立相应的联系。
图3示出了本发明的第三实施例。
图3是本发明第三实施例提供的一种基于引擎Lua脚本应用方法的流程示意图,本实施例以第一实施例为基础,包括:
步骤S301,在Lua脚本中注册所有事件.
在Lua脚本中利用关键字regevent注册事件,这样可以保证LUA脚本调用C++函数,其定义格式为:
regevent(注册事件名,事件回调函数,过滤参数)
步骤S302,在引擎中定义发送列表和接收列表。
在引擎中定义两个表,分别为发送列表与接收列表,发送列表用以存储事件消息的相应名称,接收列表用以存储事件消息的相应名称及该事件所对应的回调函数。
步骤S303,插入事件消息及该事件消息对应的回调函数到接收列表。
当加载Lua脚本时,可以获取到相应事件消息的回调函数,并将该事件消息的名称及该事件消息所调用的事件函数插入到接收列表中。
步骤S304,检测Lua脚本;
检测Lua脚本,用以确定Lua脚本是否与原来有所变化。
步骤S305,确定Lua脚本中事件消息已被修改,修改接收列表中该Lua脚本中事件消息与其对应的回调函数。
步骤S306,确定Lua脚本中事件消息已被删除,删除接收列表中该Lua脚本中事件消息与其对应的回调函数。
根据上一步骤检测Lua脚本的结果,如果Lua文件被卸载时,则需要清除接收列表中该Lua脚本中事件消息与其对应的回调函数。如果Lua文件中部分注册事件也被删除,则需要将接收列表中与之相对应的事件消息与回调函数清除。
步骤S307,插入事件消息到发送列表中。
当触发相应的消息事件时,把事件消息的相应标识插入到发送列表中,在本实施例中,事件消息的相应标识为事件消息的名称。
根据上一步骤检测Lua脚本的结果,如果Lua脚本中事件消息已经被修改,则需要对接收列表中原来该Lua脚本中事件消息及其所对应的回调函数进行相应的修改,以保证Lua脚本中注册的事件消息与其对应的回调函数与接收列表中的事件消息与其对应的回调函数保持一致。
本实施例在第一实施例的基础上,通过对Lua脚本进行检测,对于Lua列表中的注册事件的变化在接收列表中予以更新,保证Lua脚本与接收列表中的相应信息保持一致。
图4示出了本发明的第四实施例。
图4是本发明第四实施例所提供的基于引擎高效的Lua脚本应用装置图
由图4可以看出,所述的基于引擎高效的Lua脚本应用装置包括:注册单元401,用于在Lua脚本中注册所有事件;定义单元402、接收列表插入单元403、发送列表插入单元404。
所述的注册单元,用于在Lua脚本中注册所有事件;
所述的定义单元,用于在引擎中定义发送列表和接收列表;
所述的接收列表插入单元,用于插入事件消息及该事件消息对应的回调函数到接收列表;
所述的发送列表插入单元,用于插入事件消息到发送列表中。
进一步的,所述的接收列表插入单元具体用于:
加载Lua脚本;调用regevent()获取该消息事件的回调函数;插入事件消息及该事件消息对应的回调函数到接收列表。
上述基于引擎高效的Lua脚本应用装置可执行本发明实施例所基于引擎高效的Lua脚本应用的方法,具备执行方法相应的功能模块和有益效果。
图5示出了本发明的第五实施例。
图5是本发明第五实施例提供的Lua脚本与引擎相互调用的方法的流程图;
本实施例以第一实施例为基础,包括:
步骤S501,在Lua中注册所有事件。
Lua脚本是基于事件的驱动,这种事件可以是控制角色运动、键盘、鼠标、网络、自定义事件消息,在脚本中每个功能都有不同的模块,每个模块都会调用相应的事件接口,但是只有触发该事件,才会把参数传入事件回调函数,来完成该事件的功能。
在Lua脚本中利用关键字regevent注册事件,这样可以保证LUA脚本调用C++函数,其定义格式为:
regevent(注册事件名,事件回调函数,过滤参数)
其中注册事件名为:事件消息名,例如鼠标事件、键盘事件、网络事件等,事件回调函数,与注册事件名相对应,每一个事件消息对应一个事件回调函数。过滤参数,触发该消息事件需要满足一定的条件才可以回调消息函数,例如:当触发按下键盘A键时,才会回调按下A键时的回调函数,而不是只要有键盘的任意键按下就触发的。Lua采用通用类型的表(table),用它可以实现数组、哈希表、集合、对象语言内置模式匹配。
触发一个消息事件时,可能会触发一连串与之相关联的其他消息事件,在注册事件的实现是在回调函数里面,这些回调函数同时也是执行Lua脚本的入口点,其定义格式为:
Function事件回调函数名(参数)
函数体
End
步骤S502,在引擎中定义发送列表和接收列表。
首先在引擎中定义两个表,分别为发送列表与接收列表,发送列表用以存储事件消息的相应名称,接收列表用以存储事件消息的相应名称及该事件所对应的回调函数。
步骤S503,插入事件消息及该事件消息对应的回调函数到接收列表。
获取到相应事件消息的回调函数,并将该事件消息的名称及该事件消息所调用的事件函数插入到接收列表中,对于包括过滤参数的回调函数,也应该将该回调函数对应的过滤参数一并插入到接收列表中。
步骤S504,插入事件消息到发送列表中。
当触发相应的消息事件时,把事件消息的相应标识插入到发送列表中,在本实施例中,事件消息的相应标识为事件消息的名称。
步骤S505,遍历发送列表。
通过遍历发送列表,来寻找对应的事件消息所对应的事件名称,在本实施例中采用帧循环来完成对发送列表的遍历,帧循环近似于设置事件侦听器,监听用户事件,用户事件是指用户所做的一些事,基本上就是鼠标和键盘两种。通过侦听用户事件,获取是否有用户事件触发。
步骤S506,确定接收列表与发送列表事件名相同,调用接收列表的该事件的回调函数。
当接收列表与发送列表中用户所触发的事件名称相同时,可以看作是同一事件消息,通过接收列表中所插入的事件名称和回调函数来调用该事件的回调函数。有些回调函数还会有相应的过滤参数,一些触发该消息事件还需要满足一定的条件才可以回调消息函数,例如:当触发按下键盘A键时,才会回调按下A键时的回调函数,而不是只要有键盘的任意键按下就触发的。这些过滤参数也会被插入接收列表中,当满足过滤参数时,才会调用该事件的回调函数。当接收列表事件名与发送列表事件名相同,就会调用接收列表中的事件回调,而此时的事件回调又执行LUA中相应的事件回调函数。在C++中逻辑代码如下:
通过接收列表中所插入的事件名称和回调函数来调用该事件的回调函数。有些回调函数还会有相应的过滤参数,当满足过滤参数时,才会调用该事件的回调函数。
Lua脚本的执行需要相应的环境,引擎先进行相应的初始化,并加载Lua库来执行Lua文件。引擎和脚本的运行环境不同,导致他们之间不能直接通信,如果想要两者之间进行通信,那么需要建立一个抽象层也就是接口,为了方便在Lua和C++之间调用,引入了Lua_tinker库,这是一个Lua的开发环境,可以方便二者之间的数据沟通,这个库里面包含Lua_tinker.h、Lua_tinker.cpp两个文件,把这两个文件添加到工程中就可以了,用户还可以对其进行扩充,以满足游戏开发的需要。
Lua提供了API(应用程序接口)用于C/C++中构造Lua的运行环境,具体接口为:
//创建Lua上下文
Lua_State*LuaL_newstate(void)
//加载Lua脚本文件
Int LuaL_loadfile(Lua_State*L,const char*filename)
在引擎中程序编码是用C/C++语言来编写,把C/C++函数包装成Lua环境认可的函数,然后把包装好的函数注册到Lua环境里,然后加载Lua文件,在每次加载Lua文件之前都会创建一个主协程并保存这些堆栈,然后让这些堆栈之间相互发消息通讯。
在Lua文件加载时,主协程会为每个Lua文件创建一个子堆栈,各个Lua脚本独立执行,互不影响其他的Lua脚本的堆栈,即使程序出现错误,程序不至于会崩溃;同时主堆栈的加载一些Lua脚本,而子堆栈的可以共享这些实现加载的Lua脚本,实现了共享的同时又互不影响其他Lua脚本的运行。
Lua和C/C++通过堆栈进行交互,是两者之间的数据中转站,这个堆栈是由Lua来管理的。
在Lua中这个堆栈只能通过Lua的API函数访问,在C/C++和Lua中所有的操作都基于同一堆栈进行操作,操作数据时,首先将数据复制到堆栈上,然后获取数据,堆栈中的每个数据通过索引值进行定位,索引值为正时表示堆栈底的偏移索引,索引值为负时表示相对于堆栈顶的偏移索引,索引以1或者-1为起始值,因此堆栈顶索引值永远为-1,堆栈底索引值为1。即:把函数调用、参数、返回值等压入堆栈,每个数据都有相应的存取接口,数据入堆栈接口,数据获取接口,堆栈的操作接口。通过这些接口实现C/C++来调用堆栈中的数据。Lua的堆栈是用来发送和接受数据,所有的数据交换都要通过这个堆栈来完成。
在本实例中,Lua脚本在引擎所初始化的环境下运行,由于Lua脚本上注册了所有的事件,引擎中发送列表把这些事件消息插入到引擎中发送列表,通过堆栈将这些信息传送到Lua脚本,在加载Lua脚本时,Lua脚本调用regevent()函数,将该事件消息的名称与该事件消息相应的回调函数填充到相应的接收列表,通过发送列表与接收列表,使得Lua脚本中的事件消息与引擎中的回调函数建立起相应的联系,并通过堆栈进行信息传递,当有事件信息到来,例如用户触发了相应的事件,例如点击鼠标左键或者按下键盘上某个按键时,通过遍历发送列表,来寻找对应的事件消息所对应的事件名称,在本实施例中采用帧循环来完成对发送列表的遍历,帧循环近似于设置事件侦听器,监听用户事件,用户事件是指用户所做的一些事,基本上就是鼠标和键盘两种。通过侦听用户事件,获取是否有用户事件触发。当接收列表与发送列表中用户所触发的事件名称相同时,可以看作是同一事件消息,通过接收列表中所插入的事件名称和回调函数来调用该事件的回调函数。有些回调函数还会有相应的过滤参数,一些触发该消息事件还需要满足一定的条件才可以回调消息函数,例如:当触发按下键盘A键时,才会回调按下A键时的回调函数,而不是只要有键盘的任意键按下就触发的。这些过滤参数也会被插入接收列表中,当满足过滤参数时,才会调用该事件的回调函数。当接收列表事件名与发送列表事件名相同,就会调用接收列表中的事件回调。
本实施例在基于引擎高效的Lua脚本应用的基础上,增加了当有事件消息到来时,插入事件消息到发送列表中,通过遍历接收列表,寻找接收列表中与发送列表事件消息相同的事件消息,并调用接收列表中回调函数。利用LUA脚本编写游戏上层逻辑事件处理机制和UI(界面设计)部分事件,实现Lua脚本与引擎之间相互调用而无需在引擎中定义事件,可以有效的降低引擎中各个模块之间的耦合度,独立分开的处理各个模块,有利于提高开发的效率,也方便游戏的升级和更新。
图6示出了本发明的第六实施例。
图6是本发明第六实施例提供的引擎与Lua脚本相互调用的执行装置的结构图。
本实施例提供了一种基于引擎的Lua脚本执行装置,包括:事件注册单元601、定义单元602、接收列表插入单元603、发送列表插入单元604、接收列表插入单元604、遍历单元605、调用处理单元606。
所述的事件注册单元用于在Lua中注册事件;
所述的定义单元用于在引擎中定义发送列表和接收列表;
所述的接收列表插入单元用于插入事件消息及该事件消息对应的回调函数到接收列表;
所述的发送列表插入单元用于插入事件消息到发送列表中;
所述的遍历单元用于遍历发送列表;
所述的调用处理单元用于确定接收列表与发送列表事件名相同,调用接收列表的该事件的回调函数。
上述基于引擎的Lua脚本执行装置可执行本发明实施例所提供的引擎与Lua脚本相互调用的方法,具备引擎与Lua脚本相互调用的方法相应的功能模块和有益效果。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个计算装置上,或者分布在多个计算装置所组成的网络上,可选地,他们可以用计算机装置可执行的程序代码来实现,从而可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件的结合。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间的相同或相似的部分互相参见即可。
以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (9)
1.一种基于引擎Lua脚本应用方法,包括:
在Lua脚本中注册所有事件;
在引擎中定义发送列表和接收列表;
插入事件消息及该事件消息对应的回调函数到接收列表;
插入事件消息到发送列表中。
2.根据权利要求1所述的基于引擎Lua脚本应用方法,其特征在于,所述插入事件消息及该事件消息对应的回调函数到接收列表具体包括:
加载Lua脚本;
调用事件注册函数获取插入发送列表的事件消息的回调函数;
插入事件消息及该事件消息对应的回调函数到接收列表。
3.根据权利要求1所述的引基于引擎Lua脚本应用方法,其特征在于:
所述的插入事件消息及该事件消息对应的回调函数还包括插入事件消息对应的回调函数的过滤参数到接收列表。
4.根据权利要求1所述的基于引擎Lua脚本应用方法,其特征在于:
所述的基于引擎Lua脚本应用方法还包括:
检测Lua脚本;
确定Lua脚本中事件消息已被修改,修改接收列表中接收列表中被修改的Lua脚本中事件消息与其对应的回调函数;
确定Lua脚本中事件消息已被删除,删除接收列表中被删除的Lua脚本中事件消息与其对应的回调函数。
5.一种Lua脚本与引擎相互调用的方法,包括:
在Lua脚本中注册所有事件;
在引擎中定义发送列表和接收列表;
插入事件消息及该事件消息对应的回调函数到接收列表;
插入事件消息到发送列表中;
遍历发送列表,确定接收列表与发送列表事件名相同,调用接收列表的该事件的回调函数。
6.一种基于引擎Lua脚本应用装置,包括:
注册单元,用于在Lua脚本中注册所有事件;
定义单元,用于在引擎中定义发送列表和接收列表;
发送列表插入单元,用于插入事件消息到发送列表中;
接收列表插入单元,用于插入事件消息及该事件消息对应的回调函数到接收列表。
7.根据权利要求6所述的基于引擎高效的Lua脚本应用装置,其特征在于:
所述的接收列表插入单元具体用于:
加载Lua脚本;调用事件注册函数获取该消息事件的回调函数;插入事件消息及该事件消息对应的回调函数到接收列表。
8.根据权利要求6所述的基于引擎Lua脚本应用装置,其特征在于:
所述的引擎与Lua脚本相互调用的装置还包括:
检测单元,用以检测Lua脚本;
接收列表修改单元,用于在确定Lua脚本中事件消息已被修改时,修改接收列表中被修改的Lua脚本中事件消息与其对应的回调函数;
接收列表删除单元,用于在确定Lua脚本中事件消息已被删除时,删除接收列表中被删除的Lua脚本中事件消息与其对应的回调函数。
9.一种Lua脚本与引擎相互调用的装置,包括:
注册单元,用于在Lua脚本中注册所有事件;
定义单元,用于在引擎中定义发送列表和接收列表;
发送列表插入单元,用于插入事件消息到发送列表中;
接收列表插入单元,用于插入事件消息及该事件消息对应的回调函数到接收列表;
遍历单元,用于遍历发送列表;
调用处理单元,用于确定接收列表与发送列表事件名相同,调用接收列表的该事件的回调函数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410537544.1A CN104317578B (zh) | 2014-10-13 | 2014-10-13 | 基于引擎Lua脚本应用和引擎与Lua脚本相互调用方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410537544.1A CN104317578B (zh) | 2014-10-13 | 2014-10-13 | 基于引擎Lua脚本应用和引擎与Lua脚本相互调用方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104317578A true CN104317578A (zh) | 2015-01-28 |
CN104317578B CN104317578B (zh) | 2017-12-05 |
Family
ID=52372813
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410537544.1A Expired - Fee Related CN104317578B (zh) | 2014-10-13 | 2014-10-13 | 基于引擎Lua脚本应用和引擎与Lua脚本相互调用方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104317578B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106020994A (zh) * | 2016-05-06 | 2016-10-12 | 福建创意嘉和软件有限公司 | 一种脚本界面互通方法及装置 |
CN106033367A (zh) * | 2015-03-18 | 2016-10-19 | 广州四三九九信息科技有限公司 | 一种脚本游戏服务器引擎 |
CN106325866A (zh) * | 2016-08-22 | 2017-01-11 | 网易(杭州)网络有限公司 | 跨引擎调用方法及装置 |
CN106850650A (zh) * | 2017-02-21 | 2017-06-13 | 网易(杭州)网络有限公司 | 用于游戏客户端访问数据的方法及客户端游戏系统 |
CN109981538A (zh) * | 2017-12-28 | 2019-07-05 | 深圳市优必选科技有限公司 | 订阅事件的注册方法及系统、订阅事件的处理方法及系统 |
CN112866336A (zh) * | 2020-12-30 | 2021-05-28 | 北京交通大学 | 异步网络通信方法、通信系统、装置及存储介质 |
TWI730384B (zh) * | 2019-08-22 | 2021-06-11 | 新煒科技有限公司 | 影像測試方法、裝置、電腦裝置及可讀存儲介質 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101937352A (zh) * | 2010-09-20 | 2011-01-05 | 福建新大陆通信科技股份有限公司 | 一种机顶盒应用程序体系的实现方法 |
CN102520972A (zh) * | 2011-12-31 | 2012-06-27 | 上海方寸信息科技有限公司 | 电子游戏开发系统及其方法 |
CN102567014A (zh) * | 2011-11-14 | 2012-07-11 | 南京天溯自动化控制系统有限公司 | 一种Lua脚本在SCADA系统中实现动画的方法 |
US20130179308A1 (en) * | 2012-01-10 | 2013-07-11 | Gamesalad, Inc. | Methods and Systems Related to Monetization Plug-Ins in Interactive Multimedia Applications |
-
2014
- 2014-10-13 CN CN201410537544.1A patent/CN104317578B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101937352A (zh) * | 2010-09-20 | 2011-01-05 | 福建新大陆通信科技股份有限公司 | 一种机顶盒应用程序体系的实现方法 |
CN102567014A (zh) * | 2011-11-14 | 2012-07-11 | 南京天溯自动化控制系统有限公司 | 一种Lua脚本在SCADA系统中实现动画的方法 |
CN102520972A (zh) * | 2011-12-31 | 2012-06-27 | 上海方寸信息科技有限公司 | 电子游戏开发系统及其方法 |
US20130179308A1 (en) * | 2012-01-10 | 2013-07-11 | Gamesalad, Inc. | Methods and Systems Related to Monetization Plug-Ins in Interactive Multimedia Applications |
Non-Patent Citations (1)
Title |
---|
魏江平: ""LUA脚本语言在游戏引擎中的应用分析"", 《微型电脑应用》 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106033367A (zh) * | 2015-03-18 | 2016-10-19 | 广州四三九九信息科技有限公司 | 一种脚本游戏服务器引擎 |
CN106020994A (zh) * | 2016-05-06 | 2016-10-12 | 福建创意嘉和软件有限公司 | 一种脚本界面互通方法及装置 |
CN106325866A (zh) * | 2016-08-22 | 2017-01-11 | 网易(杭州)网络有限公司 | 跨引擎调用方法及装置 |
CN106325866B (zh) * | 2016-08-22 | 2019-09-20 | 网易(杭州)网络有限公司 | 跨引擎调用方法及装置 |
CN106850650A (zh) * | 2017-02-21 | 2017-06-13 | 网易(杭州)网络有限公司 | 用于游戏客户端访问数据的方法及客户端游戏系统 |
CN106850650B (zh) * | 2017-02-21 | 2021-06-04 | 网易(杭州)网络有限公司 | 用于游戏客户端访问数据的方法及客户端游戏系统 |
CN109981538A (zh) * | 2017-12-28 | 2019-07-05 | 深圳市优必选科技有限公司 | 订阅事件的注册方法及系统、订阅事件的处理方法及系统 |
TWI730384B (zh) * | 2019-08-22 | 2021-06-11 | 新煒科技有限公司 | 影像測試方法、裝置、電腦裝置及可讀存儲介質 |
CN112866336A (zh) * | 2020-12-30 | 2021-05-28 | 北京交通大学 | 异步网络通信方法、通信系统、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN104317578B (zh) | 2017-12-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104317578A (zh) | 基于引擎Lua脚本应用和引擎与Lua脚本相互调用方法及装置 | |
US11941381B2 (en) | Method for compiling from a high-level scripting language to a blockchain native scripting language | |
EP3274831B1 (en) | Application container for live migration of mobile applications | |
JP5295379B2 (ja) | 組み込みプラットフォームにおけるプログラムの動的リンキング方法および組み込みプラットフォーム | |
US7281248B2 (en) | Virtualized and realized user interface controls | |
CN102741828B (zh) | 对计算机平台的异构处理器的双向通信支持 | |
CN110019215A (zh) | 多重租赁数据库系统中的键模式管理 | |
CN109947767A (zh) | 多重租赁数据库系统中的系统共享类型 | |
CN111095338A (zh) | 用于执行不同类型区块链合约的系统和方法 | |
CN101322096A (zh) | 元数据驱动的用户界面 | |
CN101025698A (zh) | 强制性地终止输入/输出操作阻止的线程的设备和方法 | |
JP7293314B2 (ja) | イーサリアム仮想マシンのトランザクション処理方法、装置、機器、プログラムおよび媒体 | |
TWI692692B (zh) | 用於元組圖形程式之子圖內最佳化之方法 | |
CN106850650B (zh) | 用于游戏客户端访问数据的方法及客户端游戏系统 | |
CN116149797B (zh) | 面向异构场景的ai统一计算方法、装置、设备及介质 | |
CN111353235A (zh) | 一种基于模型驱动的组件端口建模方法及终端 | |
US20230128866A1 (en) | Source code conversion from application program interface to policy document | |
CN102667714A (zh) | 支持访问由操作系统环境外的资源提供的功能的方法和系统 | |
TW201913404A (zh) | 跨網路執行元組圖形程式之方法 | |
CN102388363B (zh) | 电子器件及执行虚拟机中指令的方法 | |
CN104407852B (zh) | 一种基于代码隔离的嵌入式软件构建方法和调用方法 | |
TWI689946B (zh) | 用於元組圖形程式之類型推論之系統及跨越網路執行元組圖形程式之方法 | |
CN105335203B (zh) | 共享库的二进制翻译执行方法和装置 | |
CN103631645A (zh) | 一种基于数字医疗的数字家庭中间件系统 | |
US20090007115A1 (en) | Method and apparatus for parallel XSL transformation with low contention and load balancing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20171205 |