cocos2d-js制作的游戏集成到原生app里的方法之iOS版_现有的app集成cocos游戏-程序员宅基地

技术标签: cocos2d-js  

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/houjia159/article/details/81014787

智能推荐

JavaScript语法高亮库highlight.js使用_语法高亮js css文件-程序员宅基地

文章浏览阅读9.9k次。highlight.js是一款基于JavaScript的语法高亮库,目前支持125种编程语言,有63种可供选择的样式,而且能够做到语言自动识别,和目前主流的JS框架都能兼容,可以混合使用。这款高亮库可以用在博客系统中,其使用方法及其简单,几乎不需要任何学习成本,下面介绍highlight.js的使用。1.获取highlight.js库,用户可以从官网获取:地址:https://highlightjs_语法高亮js css文件

【笔记】strftime的使用方法-程序员宅基地

文章浏览阅读5.1k次。strftimestrftime是C语言标准库中用来格式化输出时间的的函数。下面是strftime的用法各参数意义代码使用示例#include<stdio.h>#include<time.h>#define print(s1, s2,s3) \ printf("%-20s%-30s%s\n",s1, s2,s3);int main(){ time_t rawtime; struct tm* timeinfo; char timE[80]; /

2018.09.12 poj3621Sightseeing Cows(01分数规划+spfa判环)-程序员宅基地

文章浏览阅读147次。传送门 01分数规划板题啊。 发现就是一个最优比率环。 这个直接二分+spfa判负环就行了。 代码:#include&lt;iostream&gt;#include&lt;cstdio&gt;#include&lt;cstring&gt;#include&lt;algorithm&gt;#include&lt;cmath&gt;#define N 1005#define...

hive sql的常用日期处理函数总结_hive sql 日期函数-程序员宅基地

文章浏览阅读3.1k次,点赞2次,收藏14次。1)date_format函数(根据格式整理日期)  作用:把一个字符串日期格式化为指定的格式。select date_format('2017-01-01','yyyy-MM-dd HH:mm:ss'); --日期字符串必须满足yyyy-MM-dd格式   结果:2017-01-01 00:00:002)date_add、date_sub函数(加减日期)  作用:把一个字符串日期格式加一天、减一天。select date_add('2019-01-01',1); ..._hive sql 日期函数

Android Studio使用百度语音合成是TTS时报错: ****.so文件找不到的有关问题_旧版的百度语言合成报错-程序员宅基地

文章浏览阅读2.1k次。使用百度语音合成过程时,一直error : notfint libgnustl_shared.so在项目工程gradle文件中添加如下代码段:sourceSets { main { jniLibs.srcDirs = ['libs'] } }..._旧版的百度语言合成报错

BZOJ1202: [HNOI2005]狡猾的商人_狡猾的商人[hnoi2005]-程序员宅基地

文章浏览阅读425次。Description 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的。账本上记录了n个月以来的收入情况,其中第i个月的收入额为Ai(i=1,2,3…n-1,n), 。当 Ai大于0时表示这个月盈利Ai 元,当 Ai小于0时表示这个月亏损Ai元。所谓一段时间内的总收入,就是这段时间内每个月的收入额的总和。 刁姹的任务是秘密进行的,为了调查商人的账本,她只好跑到商人那_狡猾的商人[hnoi2005]

随便推点

kali 安装取证工具volatility_kali安装volatility-程序员宅基地

文章浏览阅读3.1k次,点赞2次,收藏12次。计算机取证 volatility_kali安装volatility

html禁止图片缓存(刷新网站)_html禁止浏览器缓存图片-程序员宅基地

文章浏览阅读2.1k次。地址:https://blog.csdn.net/fareast_mzh/article/details/81464031_html禁止浏览器缓存图片

如何设置一个计算机用户访问磁盘,登录后限制用户访问硬盘分区-程序员宅基地

文章浏览阅读1.3k次。限制用户登录后访问硬盘分区。我们的部门有一台公用计算机,该计算机由我维护。其他同事也可以偶尔使用它。我在操作系统中为自己创建了一个超级管理员用户,还创建了一个受限用户。登录到计算机后,如何允许受限用户查看但不能访问用于存储重要文件的D分区?您可以通过以下操作实现该目标:在系统桌面上使用鼠标依次选择“开始”。在弹出窗口的“打开”(Open)字段中键入gpedit.msc,然后单击“确定”(OK)按钮..._win7 分区只能某个用户打开

更改vscode Java项目的.class文件输出路径_vscode怎么class文件-程序员宅基地

文章浏览阅读6.7k次,点赞17次,收藏21次。1.在vscode里面按下快捷键ctrl+shift+p2.输入Classpath3.点击Output下的Browse选择.class文件的输出路径4.如图,选择完以后,.class文件的输出层级目录会自动建立_vscode怎么class文件

Python缩进规则-程序员宅基地

文章浏览阅读1.2w次,点赞4次,收藏24次。python的缩进规则:对于类定义、函数定义、流程控制语句、异常处理语句等,行尾的冒号和下一行的缩进,表示下一个代码块的开始,而缩进的结束则表示此代码块的结束。通常情况下都是采用4个空格长度作为一个缩进量(一个Tab键就表示4个空格)。一,Python缩进长度及缩进字符。 看到网上一些Python缩进的错误示范,“tab符和空格不能混用”,“缩进一定是4个空格”下列演示。​def change(a): print(id(a)) # 指向的是同一个对象(tab缩进) a=10_python缩进规则

微信小程序api视频课程-定时器-setTimeout的使用_微信小程序 settimeout 向上层传值-程序员宅基地

文章浏览阅读1.1k次。JS代码 /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { setTimeout( function(){ wx.showToast({ title: '黄菊华老师', }) },2000 ) },说明该代码只执行一次..._微信小程序 settimeout 向上层传值

推荐文章

热门文章

相关标签