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这类就可以啦,比如显示和隐藏游戏,播放动画什么的。。。

猜你喜欢

转载自blog.csdn.net/houjia159/article/details/81014787