🔧 辅助模块
概述:
为了方便开发者进行开发,加快开发效率,引擎内部以及最小资产库中,都有一些辅助的模块。
其中包含:
- 仿函数(Functor)
- KBEDebug
- Math
仿函数(Functor)
仿函数(functor),就是使一个类的使用看上去像一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了。
在我们写代码时有时会发现有些功能实现的代码,会不断的在不同的成员函数中用到,但是又不好将这些代码独立出来成为一个类的一个成员函数。但是又很想复用这些代码。写一个公共的函数,可以,这是一个解决方法,不过函数用到的一些变量,就可能成为公共的全局变量,再说为了复用这么一片代码,就要单立出一个函数,也不是很好维护。这时就可以用仿函数了,写一个简单类,除了那些维护一个类的成员函数外,就只是实现一个operator(),在类实例化时,就将要用的,非参数的元素传入类中。这样就免去了对一些公共变量的全局化的维护了。又可以使那些代码独立出来,以便下次复用。
我们来看一下引擎提供的functor,其实非常简单:
class Functor:
def __init__(self, func, *args):
self.func = func
self.args = args
def __call__(self, *args):
self.func(*(self.args + args))
用法:
比如我们有一个引擎的回调函数:createEntityAnywhere
的callback函数,如下:
def create(self):
key = KBEngine.genUUID64() # 想放进回调里一起处理,但是现在不行。
KBEngine.createEntityAnywhere(scene_data["entityType"], {}, self.onCreateCallback)
def onCreateCallback(self,entity)
# do something with entity
这是createEntityAnywhere
的callback回调函数的签名,无法更改。但是我们想在该回调函数里传入一些特定的参数,如上方代码中的key。那怎么办?
此时就需要仿函数,如下:
# 增加import
import Functor
def create(self):
key = KBEngine.genUUID64() # 现在可以了
KBEngine.createEntityAnywhere(scene_data["entityType"],
{},
Functor.Functor(self.onCreateCallback, key))
def onCreateCallback(self, key, entity)
# do something with key and entity
ok! 成功把额外的参数key
传入了回调函数,使得更加灵活。
KBEDebug
这个模块也比较好理解,就是提供一些Debug日志输出的手段。其实看下代码就比较容易理解:
def printMsg(args, isPrintPath):
for m in args:
print(m)
def TRACE_MSG(*args):
KBEngine.scriptLogType(KBEngine.LOG_TYPE_NORMAL)
printMsg(args, False)
def DEBUG_MSG(*args):
if KBEngine.publish() == 0:
KBEngine.scriptLogType(KBEngine.LOG_TYPE_DBG)
printMsg(args, True)
def INFO_MSG(*args):
if KBEngine.publish() <= 1:
KBEngine.scriptLogType(KBEngine.LOG_TYPE_INFO)
printMsg(args, False)
def WARNING_MSG(*args):
KBEngine.scriptLogType(KBEngine.LOG_TYPE_WAR)
printMsg(args, True)
def ERROR_MSG(*args):
KBEngine.scriptLogType(KBEngine.LOG_TYPE_ERR)
printMsg(args, True)
就是通过KBEngine.scriptLogType()
,先设置了日志类型,再进行print
。
Math模块
该模块在最小资产库中没有.py模块文件,是引擎内置的模块。
在IDE中
import Math
时,会提示错误。没关系,引擎会正确识别并处理的。
该模块主要提供了Vector3类和一些基于Vector3的数学计算方法,如计算两个Vector3向量的距离:distTo
等