手把手教你swift项目集成cocos2dx-js模块

手把手教你swift项目集成cocos2dx-js模块,第1张

概述前几天在swift项目集成了Lua模块,使得在swift工程中用Lua写游戏逻辑成为了可能,具体工程及配置见手把手教你swift项目添加cocos2dx-lua,由于公司最近要把js做的小游戏集成到iOS原生应用中,于是我们将解锁另外一个场景,好了,下面开始; 同样的,首先你得有一个swift项目 我们从头开始,建立一个swift项目;我们默认你已经可以自己创建一个全新的swift项目了,这很简

前几天在swift项目中集成了Lua模块,使得在swift工程中用Lua写游戏逻辑成为了可能,具体工程及配置见手把手教你swift项目添加cocos2dx-lua,由于公司最近要把Js做的小游戏集成到iOS原生应用中,于是我们将解锁另外一个场景,好了,下面开始;

同样的,首先你得有一个swift项目

我们从头开始,建立一个swift项目;我们默认你已经可以自己创建一个全新的swift项目了,这很简单,不是么?

我们用Cocos2dx创建一个Js的项目

这里我们给出两种方式创建,无论哪一种,我们的集成过程都大致相同,你可以选择任何一种你认为可用的方式;

CocosCreator方法集成

我们最终需要的是如图下的这种目录结构,如果你已经知道这些东西是怎么弄出来的,那么,请跳过本段:

新建一个CocosCreator项目,在里面完成所有Js的逻辑,你也可以先设置一个空的项目,我们先把工程集成完成;

成功后我们点击项目—>构建发布:

发布平台选择iOS,选择一个本地发布路径;模板选择deafault,这个模式下会生成需要的cocos2dx文件夹,我们需要这个库文件夹;暂时不要勾选加密,加密的没有经过实践;

构建好了就会生成上面的Js项目类似结构;

命令行方式集成

这种方式类似于Lua集成方式,具体请参照手把手教你swift项目添加cocos2dx-lua中的创建一个cocos2dx-lua项目部分,只需要将命令行中的语言改为Js就可以了:

$ ./cocos new nothing-lua -p com.charles.nothing -l Js -d /Users/dizi/Desktop
开始集成

拷贝cocos2dx
我们需要将frameworks--->cocos2d-x拷贝到swift目录下,注意,gitignore(自行Google):

拷贝Classes
我们需要将frameworks/runtime-src/Classes拷贝到swift目录下:

Resources
swift项目下建立Resources文件夹,将Js项目资源拷贝到该目录下,如图:

还有一件重要的事情,这里有一个Js依赖文件夹,需要被引入,如图:

建立工程依赖
打开swift项目,引入资源:

添加依赖工程,打开swift项目,找到我们上面拷贝的cocos2d-x,在cocos2d-x/build下找到cocos2d_libs.xcodeproj,拖到工程中;

cocos2d-x/cocos/scripting/Js-bindings/proj.ios_mac/下找到cocos2d_Js_bindings.xcodeproj拖到工程中;

完成后如图:

配置参数
这项也很重要:

在工程Build Phases添加依赖:

差点忘了一步,添加依赖库:

在工程Build Settings--->header search paths中添加路径:

在添加路径的过程中你需要非常的耐心,因为有可能由于cocos2dx不同的版本会出现需要不同的文件的情况,所以,请仔细查找添加到里面就可以了;

build成功,我需要一张图来庆祝一下!!!

我们来写点代码跑我们的Js

首先我们需要一个桥接文件把C++的初始化 *** 作完成;这里我们需要用OC的桥接类来完成这个任务,我自己创建了一个叫做CocosBrIDge的类,成生后我们把.m改为.mm,这个过程会自动生成一个桥接文件,如果没有自动生成,那么你需要再添加一个CocosJs-BrIDge-header.h的头文件,并把该文件的路径设置到build settings,如下:

下面我直接上代码了,具体过程自己体会,之后我们一起来研究;

#import <Foundation/Foundation.h>#import "CocosVIEwController.h"@interface CocosBrIDge : NSObject+ (instancetype)shared;@property(nonatomic) CocosVIEwController* vIEwController;- (voID)detoryCocos;@end
#import "CocosBrIDge.h"#import "cocos2d.h"#import "AppDelegate.h"#import "CocosVIEwController.h"@interface CocosBrIDge(){    cocos2d::Application *_app;}@endstatic AppDelegate* _cocosDelegate = nil;@implementation CocosBrIDge- (instancetype)init{    self = [super init];    if (self) {        _cocosDelegate = new AppDelegate();        //cocos2d initiatial        self.setupCocos;    }    return self;}static CocosBrIDge* _brIDge = nil;+ (instancetype)shared {    static dispatch_once_t oncetoken;    dispatch_once(&oncetoken,^{        _brIDge = [[CocosBrIDge alloc] init];    });    return _brIDge;}- (voID)setupCocos {    cocos2d::Application *app = cocos2d::Application::getInstance();    // Initialize the GLVIEw attributes    app->initGLContextAttrs();    cocos2d::GLVIEwImpl::convertAttrs();    CocosVIEwController* cocosvc = [[CocosVIEwController alloc] init];    cocosvc.wantsFullScreenLayout = YES;    cocos2d::GLVIEw *glvIEw = cocos2d::GLVIEwImpl::createWithEAGLVIEw((__brIDge voID *)cocosvc.vIEw);    cocos2d::Director::getInstance()->setopenGLVIEw(glvIEw);    app->run();    self.vIEwController = cocosvc;    _app = app;}- (voID)detoryCocos {    _app->destroyInstance();}@end
#import <UIKit/UIKit.h>@interface CocosVIEwController : UIVIEwController {}- (BOol) prefeRSStatusbarHIDden;@end
#import "CocosVIEwController.h"#import "cocos2d.h"#import "platform/ios/CCEAGLVIEw-ios.h"#import "CocosBrIDge.h"@implementation CocosVIEwController// Implement loadVIEw to create a vIEw hIErarchy programmatically,without using a nib.- (voID)loadVIEw {    // Initialize the CCEAGLVIEw    CCEAGLVIEw *eaglVIEw = [CCEAGLVIEw vIEwWithFrame: [UIScreen mainScreen].bounds                                         pixelFormat: (__brIDge Nsstring *)cocos2d::GLVIEwImpl::_pixelFormat                                         depthFormat: cocos2d::GLVIEwImpl::_depthFormat                                  preserveBackbuffer: NO                                          sharegroup: nil                                       multiSampling: NO                                     numberOfSamples: 0 ];    // Enable or disable multiple touches    [eaglVIEw setMultipletouchEnabled:NO];    // Set EAGLVIEw as vIEw of RootVIEwController    self.vIEw = eaglVIEw;}// Implement vIEwDIDLoad to do additional setup after loading the vIEw,typically from a nib.- (voID)vIEwDIDLoad {    [super vIEwDIDLoad];}- (voID)vIEwWillAppear:(BOol)animated {    [super vIEwWillAppear:animated];}- (voID)vIEwDIDdisappear:(BOol)animated {    [super vIEwDIDdisappear:animated];    CocosBrIDge* cb = CocosBrIDge.shared;// cb.detoryCocos;}// For ios6,use supportedInterfaceOrIEntations & shouldautorotate instead#ifdef __IPHONE_6_0- (NSUInteger) supportedInterfaceOrIEntations{    return UIInterfaceOrIEntationMaskAllButUpsIDeDown;}#endif- (BOol) shouldautorotate {    return YES;}- (voID)dIDRotateFromInterfaceOrIEntation:(UIInterfaceOrIEntation)fromInterfaceOrIEntation {    [super dIDRotateFromInterfaceOrIEntation:fromInterfaceOrIEntation];    auto glvIEw = cocos2d::Director::getInstance()->getopenGLVIEw();    if (glvIEw)    {        CCEAGLVIEw *eaglvIEw = (__brIDge CCEAGLVIEw *)glvIEw->getEAGLVIEw();        if (eaglvIEw)        {            CGSize s = CGSizeMake([eaglvIEw getWIDth],[eaglvIEw getHeight]);            cocos2d::Application::getInstance()->applicationScreenSizeChanged((int) s.wIDth,(int) s.height);        }    }}//fix not hIDe status on ios7- (BOol)prefeRSStatusbarHIDden {    return YES;}// Controls the application's preferred home indicator auto-hIDing when this vIEw controller is shown.- (BOol)prefersHomeIndicatorautoHIDden {    return YES;}- (voID)dIDReceiveMemoryWarning {    // Releases the vIEw if it doesn't have a supervIEw.    [super dIDReceiveMemoryWarning];    // Release any cached data,images,etc that aren't in use.}@end

然后我们在VIEwController里添加一个按钮,推出我们的Js页面,上图吧:

@IBAction func testAction(_ sender: Any) {        let cocosbrIDge = CocosBrIDge.shared()        let cocosvc = cocosbrIDge?.vIEwController        navigationController?.pushVIEwController(cocosvc!,animated: true)    }
总结

以上是内存溢出为你收集整理的手把手教你swift项目集成cocos2dx-js模块全部内容,希望文章能够帮你解决手把手教你swift项目集成cocos2dx-js模块所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1053349.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存