当前位置: 首页 > 编程日记 > 正文

【iOS-cocos2d-X 游戏开发之十四】cocos2dx(c++)中访问object函数

Cocos2dx系列博文的上一篇详细介绍了如何在Xcode中利用jni调用Android的Java层代码,还没有看过的童鞋,请移步到如下博文:

【iOS-cocos2d-X 游戏开发之十三】详细讲解在Xcode中利用预编译并通过Jni调用Android的Java层代码(cocos2dx里访问调用Android函数)!

本篇继续介绍另外一个在Cocos2dx中必经之路:在Cocos2dx中调用苹果Api以实现后期iOS的GameCenter和iap的相关操作, 那么Himi这里就跟大家简单分享探讨下;如何在Xcode中进行c++与oc混编吧~

参考王哥说的 SimpleAudioEngine 类;

首先Himi建立了两个类,一个object-c ,一个c++,详细如下:

HSpriteOC.h

  1. // 
  2. //  HSpriteOC.h 
  3. //  Oc_Cpp 
  4. // 
  5. //  Created by Himi  on 12-4-10. 
  6. //  Copyright (c) 2012年 Himi. All rights reserved. 
  7. // 
  8.   
  9. #import <Foundation/Foundation.h> 
  10.   
  11. NSString * str; 
  12. @interface HSpriteOC 
  13.   
  14. +(void) testLog; 
  15. +(void) testLogWithStr:(NSString*)_str; 
  16. +(void) hMessageBox:(NSString*)pszMsg title:(NSString*)pszTitle; 
  17. @end 
HSpriteOC.m

  1. // 
  2. //  HSprite.m 
  3. //  Oc_Cpp 
  4. // 
  5. //  Created by Himi on 12-4-10. 
  6. //  Copyright (c) 2012年 Himi. All rights reserved. 
  7. // 
  8.   
  9. #import "HSpriteOC.h" 
  10.   
  11. @implementation HSpriteOC 
  12.   
  13. +(void) testLog{ 
  14.     str = @"Himi->string is: "
  15.     NSLog(@"HSprite: testLog"); 
  16.   
  17. +(void) testLogWithStr:(NSString*)_str{ 
  18.     str = [NSString stringWithFormat:@"%@%@",str,_str]; 
  19.     NSLog(@"%@",str); 
  20.   
  21. +(void) hMessageBox:(NSString*)pszMsg title:(NSString*)pszTitle{ 
  22.   
  23.     UIAlertView * messageBox = [[UIAlertView alloc] initWithTitle: pszTitle 
  24.                                                           message: pszMsg 
  25.                                                          delegate: nil 
  26.                                                 cancelButtonTitle: @"OK" 
  27.                                                 otherButtonTitles: nil]; 
  28.     [messageBox autorelease]; 
  29.     [messageBox show]; 
  30.   
  31. @end 

这个类比较简单,简单定义了几个静态函数,打印和显示一个提示框,不赘述,大家大概看下就可以了;

下面来看c++的类:

HSpriteCPP.h

  1. // 
  2. //  HSpriteCPP.h 
  3. //  Oc_Cpp 
  4. // 
  5. //  Created by Himi on 12-4-10. 
  6. //  Copyright (c) 2012年 Himi. All rights reserved. 
  7. // 
  8.   
  9. #ifndef Oc_Cpp_HSprite_h 
  10. #define Oc_Cpp_HSprite_h 
  11.   
  12. #include "cocos2d.h" 
  13. using namespace cocos2d; 
  14.   
  15. class HSpriteCPP:public cocos2d::CCSprite { 
  16. public
  17.     static HSpriteCPP* hspriteWithFile(const char *spName); 
  18.     void myInit(); 
  19.     virtual ~HSpriteCPP(); 
  20. }; 
  21. #endif 

HSpriteCPP.cpp

  1. // 
  2. //  HSpriteCPP.mm 
  3. //  Oc_Cpp 
  4. // 
  5. //  Created by Himi on 12-4-10. 
  6. //  Copyright (c) 2012年 Himi. All rights reserved. 
  7. // 
  8. #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) 
  9. #include "HSpriteOC.h" 
  10. #endif 
  11.   
  12. #include "HSpriteCPP.h" 
  13.   
  14. HSpriteCPP* HSpriteCPP::hspriteWithFile(const char *spName) 
  15.     HSpriteCPP *pobSprite = new HSpriteCPP(); 
  16.   
  17.     if (pobSprite && pobSprite->initWithFile(spName)) 
  18.     { 
  19.         pobSprite->myInit(); 
  20.         pobSprite->autorelease(); 
  21.         return pobSprite; 
  22.     } 
  23.     CC_SAFE_DELETE(pobSprite); 
  24.     return NULL; 
  25. }  
  26.   
  27. void HSpriteCPP::myInit(){ 
  28. #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) 
  29.     //iOS代码 
  30.     [HSpriteOC testLog]; 
  31.     [HSpriteOC testLogWithStr:@"wahaha"]; 
  32.     [HSpriteOC hMessageBox:@"cocos2dx调用oc函数" title:@"Himi"]; 
  33. #else 
  34.     //Android代码 
  35. #endif 
  36.   
  37. }  
  38.   
  39. HSpriteCPP::~HSpriteCPP(){  
  40.   

此类是个自定义精灵类,都是简单的创建等函数,其HSprite.cpp类的导入和在 myInit() 自定义初始化函数中都加入了预编译(#if #else #endif 对预编译不太了解的自定百度下吧),主要为了区别当前手机设备的平台区分做处理;而且在myInit()中我使用了object-c语法进行调用之前OC写的HSprite类函数;

其实通过观察以上两个类童鞋们估计很容易看出在xcode中cpp和oc如何混编;其实就是两点:

1. 混编的类需要将其实现类(.cpp)改成(.mm)类,那么Xcode就会智能知道这个类混编类了,不用复杂的操作;

2. 混编中cpp调用oc,其实就是各自使用各自语法即可,没差异!(最好对OC和c++都比较熟悉更效率)

然后Himi在HelloWorldScene.cpp中加入以下测试代码:

  1. HSpriteCPP * sp =HSpriteCPP::hspriteWithFile("Icon.png"); 
  2.     sp->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width*0.5,CCDirector::sharedDirector()->getWinSize().height*0.5-100)); 
  3.     this->addChild(sp); 

别忘记导入对应使用的类哦~OK,看运行效果:










本文转自 xiaominghimi 51CTO博客,原文链接:http://blog.51cto.com/xiaominghimi/908852,如需转载请自行联系原作者

相关文章:

mysql实验报告四_实验报告四

实 实 验 报 告 课程名称 数据库实验及课程设计 实验项目 数据查询 实验 仪器 ___________________________ 系 别______信息管理学院______ 专 业________ ____________ 班级/ / 学号_ _ 学生姓名 _____ _____________ 实验日期 成 绩 _______________________ 指导教师 施永香…

京东数科业务架构全披露,陈生强发布城市操作系统和京东钼媒

11 月 20 日&#xff0c;在 JDD-2018 京东数字全球探索者大会上&#xff0c;陈生强宣布&#xff0c;京东数字科技&#xff08;JD Digits&#xff09;正式成为京东金融的母品牌&#xff0c;这也意味着它的业务架构逐渐明晰&#xff0c;主要下设了京东金融、京东城市、京东农牧、…

自动化测试十大要点

当一款自动化测试工具引入到一个项目中&#xff0c;我们通常对它给予很高的期望&#xff1b;项目成员希望工具能够尽可能的缩小测试范围、节约成本并缩短项目进度&#xff0c;然而可悲的是&#xff0c;很多采用自动化测试的项目依然失败了。 以下几个方面严重影响着自动化测试的…

DataGridView取得或者修改当前单元格的内容

当前单元格指的是DataGridView 焦点所在的单元格&#xff0c;它可以通过DataGridView 对象的CurrentCell 属性取得。如果当前单元格不存在的时候&#xff0c;返回Nothing(C#是null) [VB.NET] 取得当前单元格内容Console.WriteLine(DataGridView1.CurrentCell.Value) 取得当前单…

名图怎么弄云服务器_云服务器购买了宽带的速度怎么测试?

西昆云详细说一下企业租用云服务器搭建网站&#xff0c;很多新手站长会把带宽当成宽带来测试&#xff0c;比如在自己的云服务器上下载东西测试速度&#xff0c;一旦下载的东西慢了就觉得有问题&#xff0c;其实这是不准确的&#xff0c;那么如何查看云服务器的带宽速度呢&#…

ERP实施注意方面

一 厂商方面 1.信息化产品本身的功能需要强大而且灵活&#xff0c;应当能够指导企业管理水平的提升并适应企业的不同管理需要 2.厂商实力雄厚&#xff0c;人员稳定&#xff0c;服务周到&#xff0c;EPR 是个长期合作的过程 二 企业自身方面 1.企业自身管理意识&#xff0c;对ER…

一文回顾2018英特尔人工智能大会

近几日&#xff0c;整个 AI 行业的目光都聚焦在了北京。因为&#xff0c;一场人工智能盛会来了——2018 英特尔人工智能大会。逾千名国内外人工智能领域有影响力的专家、开发者、研究人员以及英特尔的客户和合作伙伴相聚在这里&#xff0c;共同探讨和分享人工智能领域的前沿技术…

用python写希尔排序_python希尔排序介绍(实例)

希尔排序介绍希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序&#xff0c;是直接插入排序算法的一种更高效的改进版本,该方法的基本思想是&#xff1a;先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序&#xff0c;然后依…

【No.5 类型转换导致的错误】

【注意】 程序语言只是我们与计算机交流并让计算机实现我们创造性思想的工具&#xff0c;可以并鼓励深入掌握一门语言&#xff0c;但千万别沉迷于钻某种语言的牛角尖&#xff0c;一定要把握好二者间的度本帖属不定时连载贴&#xff0c;以试卷的形式提出一个比较基础的问题供大家…

小学AI教材终于来了,下一步是AI胎教吗?

小学生终于也要学 AI 了&#xff01;据澎湃新闻报道&#xff0c;全国首套涵盖了从小学到高中的人工智能教材近日在上海正式发布&#xff0c;这套“AI上未来智造者”丛书计划出版 10 册&#xff0c;目前已出版 6 册&#xff0c;分别为《AI上神奇动物》、《AI上智慧生活》《AI在变…

快过年了,博客园里的文章也变少了

快过年了&#xff0c;博客园里的文章也变少了&#xff0c;大家都开始休息了吗&#xff1f;转载于:https://www.cnblogs.com/RobotTech/archive/2008/02/03/1063461.html

字符串多模式精确匹配(脏字/敏感词汇/关键字过滤算法)——TTMP算法 之实战F模式...

前面那么多篇文章都太抽象&#xff0c;这次来一个稍微实际一点的。F模式是我实际上选用的模式&#xff0c;对该模式我做了不少实际的测试&#xff0c;因此代码也算是比较稳定的。不过由于实际上为了得到该算法的效率&#xff0c;算法本身做了一些优化&#xff0c;对于初学者&am…

深入java_深入Java Final

JAVA关键字final用于修饰数据、方法或类&#xff0c;通常意味着“无法改变的”&#xff0c;既数据不能改变&#xff0c;方法不能覆盖&#xff0c;类不能继承。一般采用final有两种原因&#xff1a;设计和效率。而随着JAVA版本的更新&#xff0c;一些效率上的问题可以交由编译器…

盛会再临,2018中国大数据技术大会(BDTC)首曝日程及议题

满目皆干货&#xff0c;俯仰尽拾珠。作为年度技术趋势与行业应用的风向标&#xff0c;连续成功举办十一年的中国大数据技术大会&#xff08;BDTC&#xff09;携主题“大数据新应用”再度强势来袭&#xff0c;稳踏技术时代浪潮&#xff0c;势将引爆今冬技术圈。 数据&#xff0c…

Linux下修改MAC地址总结

偶尔会用到这个知识点&#xff0c;久了不用又会记不住&#xff0c;所以记之&#xff0c;方便以后查询。 Linux下修改MAC地址 方法一&#xff1a; 1.关闭网卡设备 ifconfig eth0 down 2.修改MAC地址 ifconfig eth0 hw ether MAC地址 3.重启网卡 ifconfig eth0 up 或者将以上内容…

hadoop 2 java hdfs_Hadoop2.6.0学习笔记(二)HDFS访问

鲁春利的工作笔记&#xff0c;谁说程序员不能有文艺范&#xff1f;通过hadoop shell与java api访问hdfs工作笔记之Hadoop2.6集群搭建已经将集群环境搭建好了&#xff0c;下面来进行一些HDFS的操作1、HDFS的shell访问HDFS设计主要用来对海量数据进行处理&#xff0c;即HDFS上存储…

知乎如何洞察你的真实喜好?首页信息流技术揭秘

11月8-9日&#xff0c;由中国 IT 社区 CSDN 与硅谷 AI 社区 AICamp 联合出品的 2018 AI 开发者大会&#xff08;AI NEXTCon&#xff09; 在北京举行&#xff0c;就人工智能的最新技术及深度实践&#xff0c;进行了全方位的解读及论证。本文是机器学习技术专题中知乎首页业务总监…

[Web开发] 微软的RSS协议扩展 - FeedSync 介绍 (4)

上一篇文章介绍了在2台电脑上同时修改数据的feedsync 同步过程&#xff0c; 今天再讨论一下当在2台电脑上同时删除同一个数据的情况。 假设最初feed 里面数据是这样的<item><sx:sync id"ep2.100" updates"1" deleted"false" noconflict…

weblogic 修改控制台密码

关掉weblogic所有进程切换到域下面$cd /home/weblogic/Oracle/Middleware/user_projects/domains/jydomain/security$java -classpath /home/weblogic/Oracle/Middleware/wlserver_10.3/server/lib/weblogic.jar weblogic.security.utils.AdminAccount weblogic weblogic123 …

WPF框架的内存泄漏BUG

用户在使用GIX4某模块的过程中&#xff0c;内存只见加不见减。我们怀疑出现了内存泄漏&#xff0c;所以我花了相当一段时间来进行此问题的排查。 我使用Red Gate公司的产品ANTS Memory Profiler 5进行应用程序的内存进行监视。并在过程中修改程序中出现的一些问题。但是最后留下…

java map深拷贝_java 实现Map的深复制

在java中有一个比较有趣的特性&#xff0c;在对对象进行赋值&#xff0c;或者clone时候一般都是我们所说的浅复制&#xff0c;Object A B;也就是说我们获取的并非在堆中重新分配的一块内存&#xff0c;而是一个指向原有数据内存的一个引用。这样的后果就是我们修改了A中的属性…

出门问问工程副总裁黄美玉入选IEEE Fellow,曾担任微软Cortana首席NLP科学家

虽然 IEEE&#xff08;国际电子电气工程协会&#xff09;2019 年的 Fellow 评选结果还未正式出炉&#xff0c;但记者刚刚获悉&#xff0c;IEEE Fellow 又新增一名华人科学家入选——出门问问工程副总裁、Mobvoi AI Lab 的负责人黄美玉博士。黄美玉博士是由于其在语音/语言技术领…

Windows2003服务器不支持FLV视频的解决方法

Windows2003服务器不支持FLV视频的解决方法2007年10月19日 星期五 10:43 A.M.原因&#xff1a;WIN2003加强了IIS6的MIME验证&#xff0c;一切未注册扩展文件格式统统显示404错误。手动在IIS中HTTP头->MIME添加MIME影射关系&#xff0c;MIME类型: video/x-flv 扩展名:.flv&am…

mpi并行 java_【并行计算】用MPI进行分布式内存编程(一)

通过上一篇关于并行计算准备部分的介绍&#xff0c;我们知道MPI(Message-Passing-Interface 消息传递接口)实现并行是进程级别的&#xff0c;通过通信在进程之间进行消息传递。MPI并不是一种新的开发语言&#xff0c;它是一个定义了可以被C、C和Fortran程序调用的函数库。这些函…

JQuery——选择器分类

JQuery选择器1 什么是JQuery选择器快速高效的找到指定节点&#xff0c;支持css语法设置页面2 JQuery选择器分类2.1 基本选择器CSS选择器层级选择器表单域选择器2.2 过滤选择器简单过滤选择器内容过滤选择器属性过滤选择器子元素过滤选择器表单域属性过滤选择器可见性过…

3月6日工作日志-88250

今天&#xff1a; 1. 与zy、vanessa一起使用mingle做了开发计划 2. 使用了XStream重写了XML格式的Dynamic Dictionary Basic Engine TODO&#xff1a; 1. 提高Dynamic Dict引擎的效率 2. 分片转换一部43W词汇的英&#xff0d;中词库(按字母、大小写分片) 转载于:https:/…

专注文本处理,达观数据完成B轮融资,累计融资超2亿元

11月22日&#xff0c;达观数据宣布成功完成1.6亿元B轮融资&#xff0c;由宽带旗下基金晨山资本领投&#xff0c;元禾重元、联想之星、钟鼎资本及老股东等跟投。达观数据总部位于上海张江高科技园区&#xff0c;目前已在北京、成都、深圳、西安等地开设分支机构。2015年获真格基…

Asp.Net Core写个共享磁盘文件Web查看器

查看器功能说明与演示 本查看器主要是为了方便大家查看服务器上的日志&#xff0c;这里没有考虑其他安全性问题&#xff0c;比如特定人员登录才能查看&#xff0c;这个需要您们自己去增加&#xff1b;如果你服务器有对外开放了ip&#xff0c;那么运行这个软件的时候建议考虑配置…

ImageNet时代将终结?何恺明新作:Rethinking ImageNet Pre-training

译者 | 刘畅 林椿眄整理 | Jane出品 | AI科技大本营Google 最新的研究成果 BERT 的热度还没褪去&#xff0c;大家都还在讨论是否 ImageNet 带来的预训练模型之风真的要进入 NLP 领域了。如今&#xff0c;Facebook AI Research 的何恺明、Ross Girshick 及 Piotr Dollar 三位大佬…

java 序列化 缓存_java_缓冲流、转换流、序列化流

一、缓冲流缓冲流的基本原理&#xff0c;是在创建流对象时&#xff0c;会创建一个内置的默认大小的缓冲区数组&#xff0c;通过缓冲区读写&#xff0c;减少系统IO次数&#xff0c;从而提高读写的效率。字节缓冲流构造方法创建字节缓冲输入流&#xff1a;BufferedInputStream bi…