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

IOS应用内嵌cocos2dx游戏项目的更多相关文章

  1. Android应用内嵌cocos2dx游戏项目

    cocos2dx的Android环境搭建(Windows/Mac) 我用的cocos2dx3.15版本的. 以下步骤是在Windows平台执行的. 创建Cocos2d-x项目 将刚才下载的cocos2 ...

  2. ios应用内嵌h5页面数据自动变色识别为手机号码的解决方法——手机号码拨号禁用IOS手机页面数字自动识别为手机号

    异常如下: ios应用内嵌h5页面,本来是设置了白色的数字,两三秒之后会自动变为黑色,然后点击的时候就会弹出是否拨号的提示: 解决方法: 添加如下meta标签,即可解决: <meta name= ...

  3. iOS 之 内嵌网页

    现在iOS 有两种内嵌网页的技术,一种是UIWebView,而另一种WKWebView则是iOS8之后出现的技术. iOS 之 UIWebView WKWebView

  4. Android应用内嵌unity3d游戏项目

    在一个现有的Android项目中嵌入unity3d项目 1.将unity3d项目导出android工程 2.将第一步导出的Android工程中assets文件夹和libs文件夹下的所有内容复制到And ...

  5. 关于Unity程序在IOS和Android上显示内嵌网页的方式

    近期因为有须要在Unity程序执行在ios或android手机上显示内嵌网页.所以遍从网上搜集了一下相关的资料.整理例如以下: UnityWebCore 从搜索中先看到了这个.下载下来了以后发现这个的 ...

  6. ios原生项目内嵌u3d工程

    本文一反常态,目标是把u3d工程以framewWork形式 内嵌原生IOS项目 1.xcode中新建Cocoa Touch FrameWork.取名u3dFrameWork 2.把u3d导出的xcod ...

  7. cocos2d-x调用android内嵌浏览器打开网页

    cocos2d-x调用android内嵌浏览器打开网页,能够从入口传入网址,C++调用android 的api就可以实现. 方法也非常easy 1. 改动"cocos2dx\platform ...

  8. 内嵌iframe页面在IOS下会受内部元素影响自动撑开的问题

    IOS下的webview页面,内嵌iframe元素,将其样式指定为宽高100%: .iframe { width: %; height: %; } 在安卓下运行均无问题,但是在IOS下会出现异常. 具 ...

  9. Cocos2d-x使用iOS游戏内付费IAP(C++篇)

    本文章转载 http://www.ityran.com/archives/5515.非本人原创! 前期准备 设备与账号 在开始编码之前我们需要准备测试环境. IAP只能真机测试,准备一台iOS设备是必 ...

随机推荐

  1. Linux记录-CPU指标介绍

    在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况.而监控CPU的性能一般包括以下3点:运行队列.CPU使用率和上下文切换. 对于每一个CPU来说运行队列最好不要超过3,例 ...

  2. C#设计模式(3)——抽象工厂模式

    1.抽象工厂模式介绍 上一篇我们了解了工厂模式,知道工厂模式可以解决简单工厂的缺陷(简单工厂添加新产品时要修改工厂类,不符合开闭原则),但是简单工厂和工厂模式都是只生产一种产品(前边的简单工厂和工厂都 ...

  3. Eclipse 常用技巧及常见问题解决

    文章目录 Eclipse默许函数折叠打开 Eclipse插件: win7屏蔽ctrl+alt+up/down快捷键/ (eclipse冲突) 去掉 eclipse 中自动生成的注释 //TODO 常见 ...

  4. 今天我们来聊聊svn的使用

    前言:作为一名码农,如果你告诉你的小伙伴你不会使用版本控制,那么你将会被小伙伴所鄙视,这个文章从区别带你领略他们的优缺点. (一)git和svn之间的区别 svn相当于是一个云存储,必须要借助网络,才 ...

  5. Can't read swagger JSON from http://localhost:8080/Test/api-docs

    新手入坑Swagger,搜了下网上博客,各种整合费时费力.弄出来竟然报错: Can't read swagger JSON from http://localhost:8080/Test/api-do ...

  6. Openresty 学习笔记(二)Nginx Lua 正则表达式相关API

    ngx.re.match 语法: captures, err = ngx.re.match(subject, regex, options?, ctx?, res_table?) 环境: init_w ...

  7. protobuf使用简介

    官网:https://github.com/google/protobuf 环境:windows,java 1. protobuf概述protobuf是Google开发一种数据描述格式,能够将结构化数 ...

  8. sql parser

    最近在整理很多SQL代码, 需要分析出每个SQL的目标表和源表各有哪些, 网上没有找到工作具, 打算写个工具. Java调研结果:1. 商业组件包 sqlparser 有试用版组件, 限制SQL少于1 ...

  9. Java SSM框架之MyBatis3(十)MyBatis批量插入数据(MySql)

    插入成功后返回自增主键 <insert id="insertRole" parameterType="role" useGeneratedKeys=&qu ...

  10. IIS Express URL Rewrite无效

    点击一下项目,再选择属性选项卡(不是右键属性) 如上图,如果托管管道模式是集成的话,改为经典即可.如果在vs2010的 WebDev.WebServer40方式启动 默认就是经典模式