EasyNDK-for-cocos2dx

原文地址:https://github.com/aajiwani/EasyNDK-for-cocos2dx#easyndk-for-cocos2dx

Wiki Link : http://cocos2d-x.org/projects/cocos2d-x/wiki/EasyNDK

Chart boost Integration Guide : http://ideasrefactored.wordpress.com/2013/03/02/chartboost-integration-in-cocos2dx-game-2/

NDK in cocos2dx is a problem, most of the developers don't want that pain to slow down there process of game making. While i wanted to port a game made on cocos2dx from iOS to Android it did without any mess, but when it came to working with native features like GameCenter on iOS and AppCircle for Android(Amazon) it was a pain to write conditional code and do mess with both C++ and Objective C (ios) and Android (java) files.

From that pain i learned alot and finally created a hassle free library to integrate both platform with a breeze.

I found that json is a great data language with which one can easily transfer their data structures across platforms, be it web or be it languages that we work in our daily lives.

I have created this library with just string usage, you can parse json in almost any language for smart phones. With json i can transfer structures without any need to create them on both ends that is C++ and the native platform.

Currenty, I am not parsing dates in json. Current parser is ok to parse, dictionary, array, boolean, int, real and string

Q.) How it works ?

A.) It works on a protocol which is simple to be understood. In any particular environment, on init of it, specify
    the reciever that can listen messages sent from C++. Second, remaining on a particular CCNode in Cocos2dx C++ file,
    register global selectors that will respond to NDK calls from native platform, for the ease of use i have used
    groups. So that on leaving that particular scene of layer or at any instance you can remove the whole group,
    instead of deleting each item individually. After the above requirements are met, simply compose CCObject that is
    CCDictionary from C++ as parameters to be sent and a string that would contain the name of the method sent to native
    platform. In the native platform you can simply have method names exactly like the message you sent for the simplicity.
    You will get the native type of parameters that is NSDictionary* in iOS and JSONObject in Android. Similarly you can
    pass a message from native to C++ platform, by composing a NSDictionary or JSONObject with a method name, this method
    name would be checked for the selector string that you have already registered with, and on C++ you will get hit on
    that selector once the message occurs. You will get CCDictionary in C++ environment.

Diagram :

                ==>                  ==> Communication Loop             ==>    Remove C++
Assign          ==>     C++          ==> C++ -> Native (Message)        ==> Selector Groups
Native Reciever ==> Assign Selectors ==> Native Method Call             ==>
                ==> In Groups        ==> Native -> C++ (Message)        ==>  Remove Native
                ==>                  ==> C++ Selector Call (Cocos2dx)   ==>    Reciever

Under the hood, when you pass a message either from C++ or Native, the message is converted to a JSON string using a C Library namely Jansson (http://www.digip.org/jansson/), licensed under MIT. There are helper method written to convert the data from CCDictionary to JSON and from JSON to CCDictionary.

This is the basics of how this helper works.

For details of individual platforms source contains the respective folder

/jansson                            => Contains the C Library Jansson (http://www.digip.org/jansson/)

/NDKHelper
    /NDKCallbackNode.h              => C++ Class, to work as a node, that contains selector info that would be assigned from C++ to the global space
    /NDKCallbackNode.cpp            => Implementation of NDKCallbackNode
    /NDKHelper.h                    => Main NDKHelper class for to send and recieve messages from and to C++, for iOS and Android currently
    /NDKHelper.cpp                  => Implementation of NDKHelper

/ios
    /RootViewController.h           => Sample ios controller to recieve and send messages to C++
    /RootViewController.mm          => Implementation of RootViewController

/Classes
    /HelloWorldScene.h              => A basic scene from cocos2dx sample, including a selector to respond to native environment message
    /HelloWorldScene.cpp            => Implementation of HelloWorldScene

/android
    /Android.mk                     => The file, you will require to add paths for include and compilation
    /com
        /easyndk
            /EasyNDK.java               => A sample Cocos2dx Activity to show the sample of message passing with Java and C++
            /classes
                /AndroidNDKHelper.java  => Java implementation of NDKHelper
                /NDKMessage.java        => A sample class to contain the NDKMessage to transfer to C++
/IOSNDKHelper
    /IOSNDKHelper-C-Interface.h     => C header for IOS to attach a reciever and send message to C++
    /IOSNDKHelper.h                 => Objective C wrapper for NDKHelper in iOS
    /IOSNDKHelper.mm                => Implementation of IOSNDKHelper

Sample Scenario :

You are working on a game which have a submit score button, now you are using game center on ios and someother third party
tool on android. If you will write your NDK code you might need to write it seperately and with many #if checks, from the 
above made protocol, you can simply issue a message of submitting score and send score as a parameter, and on different 
platforms ios and android write respectively different codes to handle it (Objc and Java). You simply have to watch for 
a specific message on both platforms. And with the above library you can do it without any hassle. Publishing builds on
different platforms would become breeze.
Try It, and comment. Please do let me know what this library can be improved. Thankyou.


内容概要:本文详细介绍了如何利用Simulink进行自动代码生成,在STM32平台上实现带57次谐波抑制功能的霍尔场定向控制(FOC)。首先,文章讲解了所需的软件环境准备,包括MATLAB/Simulink及其硬件支持包的安装。接着,阐述了构建永磁同步电机(PMSM)霍尔FOC控制模型的具体步骤,涵盖电机模型、坐标变换模块(如Clark和Park变换)、PI调节器、SVPWM模块以及用于抑制特定谐波的陷波器的设计。随后,描述了硬件目标配置、代码生成过程中的注意事项,以及生成后的C代码结构。此外,还讨论了霍尔传感器的位置估算、谐波补偿器的实现细节、ADC配置技巧、PWM死区时间和换相逻辑的优化。最后,分享了一些实用的工程集成经验,并推荐了几篇有助于深入了解相关技术和优化控制效果的研究论文。 适合人群:从事电机控制系统开发的技术人员,尤其是那些希望掌握基于Simulink的自动代码生成技术,以提高开发效率和控制精度的专业人士。 使用场景及目标:适用于需要精确控制永磁同步电机的应用场合,特别是在面对高次谐波干扰导致的电流波形失真问题时。通过采用文中提供的解决方案,可以显著改善系统的稳定性和性能,降低噪声水平,提升用户体验。 其他说明:文中不仅提供了详细的理论解释和技术指导,还包括了许多实践经验教训,如霍尔传感器处理、谐波抑制策略的选择、代码生成配置等方面的实际案例。这对于初学者来说是非常宝贵的参考资料。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值