文章撰寫日期︰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的方式或者下一篇。
沒有留言 :
張貼留言