zoukankan      html  css  js  c++  java
  • IOS应用内嵌cocos2dx游戏项目

    1.创建Cocos2d-x项目

    相比于Android来说cocos2dx的iPhone环境基本不用配置,直接创建用xcode打开就可以运行。

    Cocos2d-x官方网站下载最新版本引擎。

    将刚才下载的压缩包解压到你指定的文件夹里(我的是cocos2dx3.16)。

    进入到目录cocos2d-x-3.16/tools/cocos2d-console/bin/cocos.py

    打开终端运行cocos.py脚本创建文件

    ./cocos.py new HelloWorldDemo -p com.coco2dx.TestCocos -l cpp -d ~/Desktop
    
    或者
    
    python cocos.py new HelloWorldDemo -p com.coco2dx.TestCocos -l cpp -d ~/Desktop

    参数说明:

    • TestCocos为项目名称
    • -p后面接包名
    • -l后面接开发语言类型,有cpp, lua, js三种类型
    • -d后面接项目存放的目录

    2.新建一个IOS项目,名字自取(我的是TestIOSCocos),把相应cocos2dx工程cocos2d-x和游戏资源(我创建的是lua项目,游戏资源包括res、src、config.json、Classes)拷贝到此IOS项目下,在IOS项目下创建Resource并将刚才拷贝的资源res、src、config.json转移到此文件夹下

    3.添加 依赖、引用、资源(注意:Resource 下的res和src是蓝色的)

    3.资源什么的都已经导入完成后,现在要做的是导入cocos2d_libs.xcodeproj、cocos2d_lua_bindings.xcodeproj、libsimulator.xcodeproj(其中libsimulator.xcodeproj可导入也可不导入,这个是模拟器运行时需要的)

     

    导入之后的目录如上图

    4.配置target Dependencies

    5.配置Link Binary

    注意当导入libz.dylib的时候发现没有这个库,不要慌,按照下图操作:点击Add Other---command+shift+G----/usr/lib/ ---进入文件夹找到相关文件添加即可

    6.Header Search Paths添加路径

    7.cocos不支持 Bitcode,所以改为NO

    8.添加cocos的viewcontroller相关代码到IOS项目下,将AppDelegate.m改为MyAppDelegate.mm因为因为cocos中已经存在AppDelegate避免冲突,main.m中AppDelegate也替换成MyAppDelegate,并将.m文件后缀改为.mm

    9.在Main.storyboard中添加一个按钮并且为按钮添加点击事件

    10.在MyAppDelegate.mm中添加代码:static AppDelegate s_sharedApplication;

    11.参照TestCocos项目的Build Settings对TestIOSCocos做相应的修改

    现在可以编译运行了,不过一般都会报错

    "stack" file not found 的问题解决方案这个问题可能是因为我们在.m文件中引用了'<stack>',或者.cpp文件或.h文件中引用了'<stack>',但最后被.m文件应用了,导致了上面的错误。这里我们的解决方法可以考虑删除引用,或者把.m文件的后缀改成.mm,这样就可以和cpp语言混编不再报错了。

    "use of undeclared identifier static_assert" 的问题解决方案在将cocos2d-x整合进我原有的工程的过程中遇到了“static_assert”的问题,网上的解释和解决方案是因为'static_assert'方法是在C++11中支持的,所以我们需要在build的时候使用C++11来编译。具体方法是在 'Build Settings' 中的 'Apple LLVM 7.1 - Language - C++' 中设置 'C++ Language Dialect'为'GNU++11 [-std=gnu++11]'和'C++ Standard Library'为'libc++ (LLVM C++ standard library with C++11 support)'。

    后续补充:关于推出游戏返回应用界面,并再次启动问题

    上面说的方法在第一次运行的时候是没有问题的,但是推出游戏返回应用界面并且再次启动游戏就会crash。

    解决办法:在执行cocos2d::Director::getInstance()->end();完之后返回应用界面的时候要延时处理,代码如下图

    注释或者删除MyAppDelegate.mm中AppDelegate相关内容

    更改RootViewController.mm如下图

    最后是lua调用Jumping的exitGame函数,lua调用oc网上有很多教程,我使用的是luaoc.callStaticMethod(className,"exitGame",args),调用的oc方法要写成静态的

    local function clickBack(sender,eventType)

        if eventType == ccui.TouchEventType.ended then

            print("back~~~~~~~")

            local luaoc = require "cocos.cocos2d.luaoc"

            local args = {}

            local className = "Jumping"

            local ok,ret  = luaoc.callStaticMethod(className,"exitGame",args)

            if not ok then

                cc.Director:getInstance():resume()

            else

                print("The ret is:", ret)

                cc.Director:getInstance():endToLua()

                --os.exit()

            end

        end

    end

    项目源码:https://github.com/Ring1992/TestIOSCocos

  • 相关阅读:
    问题账户需求分析
    UnityWebRequest_ZT
    NetworkManager网络通讯_问题汇总(四)
    NetworkManager网络通讯_NetworkLobbyManager(三)
    NetworkManager网络通讯_NetworkManager(二)
    C#关于private protected sealed Virtual/Override
    NetworkManager网络通讯_Example(一)
    Udp 异步通信(三)
    TCP Socket服务端客户端(二)
    TCP UDP基本编程(一)
  • 原文地址:https://www.cnblogs.com/ring1992/p/7701775.html
Copyright © 2011-2022 走看看