cocos2d-js製作的遊戲集成到原生app裏的方法之iOS版

1、使用cocos2d-x 3.13版本(當然其他版本也可以的,不過可能有些地方改動不一樣),在命令行中新建cocos2d項目,使用js語言。

2、新建成功後,找到文件所在目錄,打開,目錄如下.

3、然後打開cocos2d_js_binding.xcodeproj工程,如圖目錄下。

4、按如圖配置一下,然後編譯(模擬器最好選iphone5,因爲之前做cocos2d-lua的時候,xcode8對luajit的支持好像不完善,導致模擬器運行的時候只能選擇iphone5及以下,真機的話就沒這個問題了)

5、真機調試的話,這裏選擇Generic iOS Device。debug和release模式看個人了,我一般先用debug,萬一有錯誤的話,查起來方便,之後就改爲release。

6、點擊左上角那個三角形編譯成功後,選中左側靜態庫libcocos2d iOS.a,看右邊的fullpath,點擊最後面的小箭頭,就會指引你去這個靜態庫所在目錄啦。

7、如果點擊後沒跳轉的話,那就只能複製一下這個路徑了,比如/Users/cxp/Library/Developer/Xcode/DerivedData/cocos2d_libs-gtvjufizxzyrodawozkyysktnkmn/Build/Products/Debug-iphoneos/ 然後打開Finder ,按下Command+shift+G進入文件夾搜索,粘貼後點擊前往就可以啦,這次準能找到,再找不到,額,那我,也不知道咋整了。

8、找到的就是這個啦,複製一下備用先。

9、然後把Classes和剛剛生成的libjscocos2d iOS.a拷貝到cocos2d_libs.xcodeproj同級目錄下,打開剛剛新建的cocos2d_libs.xcodeproj工程。Classes裏面主要是可以連接cocos和ios那邊的接口。

10、把Classes和靜態庫libjscocos2d iOS.a添加到工程裏。

11、設置一下頭文件查找路徑,避免等會出現各種找不到頭文件的錯誤提示。

12、添加cocos需要的相應庫,並把靜態庫拖到那裏。

13、如圖把Classes下的可執行文件即.mm .cpp文件拖到Compile Sources裏,參與編譯。

14、這裏是重點了(敲黑板狀)!把CocosManager.h拖到Headers下面的Public下,其他的頭文件都拖到Project下,因爲之後CocosManager.h要暴露出來作爲接口給iOS用的。

15、然後就是和步驟4、5、6、7一樣了生成libcocos2d iOS.a靜態庫,並找到它拷貝備用。

16、這裏編譯的時候可能會出現找不到一些.a文件的錯誤,如圖,這時候就把Link Binary With Libraries下的相關.a文件先刪掉,然後在左側的extenal下把剛剛刪除的那幾個再拖過去,然後在編譯一下,還是有錯的話就重啓Xcode就沒問題了,恩,如果還有問題,我也布吉島啦。

17、這裏還要提一下,剛剛的那個CocosManager接口,想起來改了個關於觸摸傳遞的東東。觸摸層默認是只能在cocos層或者ios層的,沒法穿透,當然可以選擇把cocos的view做小,cocos沒遮到的ios層就還是可以點擊的了,我是做了一個處理,重載了下-(UIView*) hitTest:(CGPoint)point withEvent:(UIEvent*)event,使得點擊遊戲層裏的相關部分不穿透,遊戲裏的其他部分的話就直接穿透到ios層。
@property (nonatomic, assign)CGRect m_notAllowedTouchRect; //不可點擊區域
@property (nonatomic, assign)BOOL m_allowedThrough; //是否穿透 
上面這兩句加到CCEAGLView-ios.h裏

18、在CCEAGLView-ios.mm裏最上面加入 BOOL b_testHits;

19、在CCEAGLView-ios.mm裏最下面重載-(UIView*) hitTest:(CGPoint)point withEvent:(UIEvent*)event,
-(UIView*) hitTest:(CGPoint)point withEvent:(UIEvent*)event
{
if (b_testHits) {
return nil;
}

if (CGRectEqualToRect(self.m_notAllowedTouchRect, CGRectZero)) {
    return self;
}
else{
    //返回Touch操作初始點所在的視圖(View),即需要將觸摸事件傳遞給其處理的視圖
    UIView *hitView = [super hitTest:point withEvent:event];
    if (hitView == self) {
        b_testHits = YES;

        CGPoint superPoint = [self.superview convertPoint:point fromView:self];
        UIView *superHitView = [self.superview hitTest:superPoint withEvent:event];
        b_testHits = NO;
        //NSLog(@"CGRectContainsPoint.....x = %f  y = %f",point.x,point.y);
        //NSLog(@"CGRectContainsPoint.....x = %f  y = %f  width = %f  height = %f",self.m_notAllowedTouchRect.origin.x,self.m_notAllowedTouchRect.origin.y,self.m_notAllowedTouchRect.size.width,self.m_notAllowedTouchRect.size.height);
        //判斷當前點是否在矩形區域內,不在矩形區域內就穿透
        if (!CGRectContainsPoint(self.m_notAllowedTouchRect, point)) {
            //NSLog(@"CGRectContainsPoint...");
            hitView = superHitView;
        }

        if(self.m_allowedThrough){
            hitView = superHitView;
        }
    }
    return hitView;
}

}

20、然後打開CocosManager.mm文件,裏面就可以設置觸摸不可穿透區域的範圍啦。

21、接下來就可以新建一個ios空工程了,然後把剛剛生成的靜態庫libcocos2d iOS.a和CocosManager.h拷貝到ios工程根目錄下,並新建一個Resources文件夾。

22、把cocos工程下的script文件夾整個拷貝到ios工程根目錄下。

23、把自己cocos工程下的這四個文件拷貝到剛剛新建的Resources下面。

24、打開ios工程,並添加剛剛加的那些文件。

25、注意添加script文件夾時,選擇reference選項。

26、添加Resources後,把裏面的文件刪除後再以reference方式添加,然後這些文件夾會顯示藍色。

27、給ios工程添加相應框架。

28、在需要接入cocos2d遊戲的類裏引入CocosManager.h。

29、然後在需要的地方調用相應接口顯示遊戲。(具體接口實現都在classes裏面的CocosManager.mm裏)

30、最終的流程就是,ios這邊調用接口加載cocos,然後再調用其他接口切換場景。需要其他的接口就改一下CocosManager這類就可以啦,比如顯示和隱藏遊戲,播放動畫什麼的。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章