[cocos2d-x / ios篇]教學2︰使用EasyNDK從C++呼叫Objective-C

文章撰寫日期︰2013/12/29 16:40
cocos2d-x使用版本︰2.1.4

一、前言

上一篇我們在Xcode專案初始化EasyNDK環境後,
這篇就要繼續來說明怎麼從C++呼叫Objective-C

二、文章開始

底下示例從 C++ 叫岀 IOS 的 UIAlertView彈跳視窗

實作C++端

在Classes\HelloWorldScene.cpp開始處宣告
#include "NDKHelper.h"

然後修改關閉按鈕觸發後的事件如下
void HelloWorld::menuCloseCallback(CCObject* pSender)
{
    CCLog(__FUNCTION__);
    
    // 在C++中呼叫Objective-C的函式︰SampleSelector
    SendMessageWithParams(string("SampleSelector"), NULL);
}

實作Objective-C端

在ios\RootViewController.h宣告即將從C++呼叫的函式SampleSelector

在RootViewController.mm裡匯入EasyNDK套件
#include "IOSNDKHelper.h"

添加底下函式讓Objective-C端註冊IOSNDKHelper,
目的是讓RootViewController.mm有能力監聽從C++端傳來的呼叫
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {

        // 告訴NDKHelper說 RootViewController會回應來自C++的message
        [IOSNDKHelper SetNDKReciever:self];
        
    }
    return self;
}

實作SampleSelector函式
- (void) SampleSelector:(NSObject *)prms
{
    NSLog(@"Objective-C端的SampleSelector被呼叫了");
    
    // Show a bogus pop up here
    UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Hello World!"
                                                      message:@"This is a sample popup on iOS"
                                                     delegate:nil
                                            cancelButtonTitle:@"OK"
                                            otherButtonTitles:nil];
    [message show];
}

成功了!

執行專案,
此時看到ios simulator跳岀畫面如下
從C++呼叫岀來的UIAlertView彈跳視窗

三、結論

從上面的教學來看,
從C++呼叫Objective-C一點也不難。
只要將EasyNDK專案匯入遊戲專案,
然後在.cpp和.mm檔引用套件並使用EasyNDK的函式SendMessageWithParams,
便能輕易地與Objecitve-C溝通。

這篇教學文的目的是簡單易懂,
如果您還有進階的需求,
像是想用SendMessageWithParams傳送Object給Objective-C,
或者希望從Objective-C呼叫回C++端,
可以參考官方教學使用CCDictionary的方式或者下一篇

沒有留言 :

張貼留言