zoukankan      html  css  js  c++  java
  • cocos2d-x 中LUA和平台之间的函数调用理解

    先看一张流程图如下:

    第一步:

       先把NDKHelper中的方法转成LUA中可以调用的,转得方法可参考quick中LUA的用法。这个类主要是中间桥梁的作用,它可以根据是什么平台调用IOSNDKHelper或者AndroidSNDKHelper,这些判断都是用C语言来写的。还有就是对一些回调函数的保存机制和平台要用LUA中一些方法的保存。

    第二步:

       IOS平台需要处理的就是IOSNDKHelper,这个类主要就是接收和发送给NDKHelper数据的方法,还有一个就是加载IOS平台的BasePlatformHelper类和继承该类的子类。最后写不同SDK需要用到的方法,这个方法都是在 BasePlatformHelper的子类中写。这些方法是和LUA中对应的。完成后在初始化的时候把它和它的父类通过IOSNDKHelper加载到内存当中。

    第三步:

       Android的处理方式和ios差不多,按照ios的思想写就可以。其中Android中需要AndroidSNDKHelper类,它的作用也就是接收和发送函数、参数到到NDKHelper中,还有就是加载Android中平台要用的方法到内存中。

    第四部:

      流程如下

        在LUA中调用sendMessageToNative方法时传入需要调用的方法和参数以及回调函数,在该方法中如果有回调函数的话,就把回调函数保存到内存当中,然后在调用C语言中得方法判断是IOS还是Android平台,如果是IOS平台的则就会调用IOSNDKHelper中的RecieveCPPMessage方法,RecieveCPPMessage这个方法会根据你传入的方法名和参数调用在平台上定义的方法。该方法执行完以后如果不需要返给调用者数据的话,这个流程就完成了,如果需要返给调用着数据的话,就把要反的数据和函数名通IOSNDKHelper类中 SendMessage方法传回去。在SendMessage方法中会把你传入的参数做处理然后在调用NDKHelper类中得HandleMessage方法,在HandleMessage中会根据你传入的方法名在内存中查找之前你传入的回调函数句柄,然后用参数和函数句柄根据LUA的处理方式调用LUA中对应的方法。Android的和ios的调用类似。

    以上就是LUA中调用平台的方法流程。

        平台把调用LUA中的方法时就是把调用的方法和参数通过 IOSNDKHelper和AndroidSNDKHelper 传给NDKHelper,NDKHelper通过处理后调用LUA 方法。

    以上就是个人的一点理解,有理解错误的地方希望大牛给予指点。

  • 相关阅读:
    239. [LeetCode ]Sliding Window Maximum
    152.[LeetCode] Maximum Product Subarray
    53. [LeetCode] Maximum Subarray
    90 [LeetCode] Subsets2
    78[LeetCode] Subsets
    练习7.52
    练习7.47、7.48、7.49、7.51
    关于类类型的隐式类型转换
    练习7.44、7.45、7.46
    练习7.36、7.37、7.39、7.40
  • 原文地址:https://www.cnblogs.com/liwenxue88/p/3915733.html
Copyright © 2011-2022 走看看