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. #import <Foundation/Foundation.h>
  9. NSString * str;
  10. @interface HSpriteOC
  11. +(void) testLog;
  12. +(void) testLogWithStr:(NSString*)_str;
  13. +(void) hMessageBox:(NSString*)pszMsg title:(NSString*)pszTitle;
  14. @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. #import "HSpriteOC.h"
  9. @implementation HSpriteOC
  10. +(void) testLog{
  11. str = @"Himi->string is: ";
  12. NSLog(@"HSprite: testLog");
  13. }
  14. +(void) testLogWithStr:(NSString*)_str{
  15. str = [NSString stringWithFormat:@"%@%@",str,_str];
  16. NSLog(@"%@",str);
  17. }
  18. +(void) hMessageBox:(NSString*)pszMsg title:(NSString*)pszTitle{
  19. UIAlertView * messageBox = [[UIAlertView alloc] initWithTitle: pszTitle
  20. message: pszMsg
  21. delegate: nil
  22. cancelButtonTitle: @"OK"
  23. otherButtonTitles: nil];
  24. [messageBox autorelease];
  25. [messageBox show];
  26. }
  27. @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. #ifndef Oc_Cpp_HSprite_h
  9. #define Oc_Cpp_HSprite_h
  10. #include "cocos2d.h"
  11. using namespace cocos2d;
  12. class HSpriteCPP:public cocos2d::CCSprite {
  13. public:
  14. static HSpriteCPP* hspriteWithFile(const char *spName);
  15. void myInit();
  16. virtual ~HSpriteCPP();
  17. };
  18. #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. #include "HSpriteCPP.h"
  12. HSpriteCPP* HSpriteCPP::hspriteWithFile(const char *spName)
  13. {
  14. HSpriteCPP *pobSprite = new HSpriteCPP();
  15. if (pobSprite && pobSprite->initWithFile(spName))
  16. {
  17. pobSprite->myInit();
  18. pobSprite->autorelease();
  19. return pobSprite;
  20. }
  21. CC_SAFE_DELETE(pobSprite);
  22. return NULL;
  23. }
  24. void HSpriteCPP::myInit(){
  25. #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
  26. //iOS代码
  27. [HSpriteOC testLog];
  28. [HSpriteOC testLogWithStr:@"wahaha"];
  29. [HSpriteOC hMessageBox:@"cocos2dx调用oc函数" title:@"Himi"];
  30. #else
  31. //Android代码
  32. #endif
  33. }
  34. HSpriteCPP::~HSpriteCPP(){
  35. }

此类是个自定义精灵类,都是简单的创建等函数,其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,如需转载请自行联系原作者

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

  1. iOS cocos2d 2游戏开发实战(第3版)---你的第一个游戏!

    2019独角兽企业重金招聘Python工程师标准>>> 随着苹果公司不断地创新与发展,新的iPhone 5.iPad 4以及iPad mini产品相继问世,包括iOS与Xcode在内 ...

  2. iOS cocos2d 2游戏开发实战(第3版)

    <iOS cocos2d 2游戏开发实战(第3版)> 基本信息 原书名:Learn cocos2d 2: Game Development for iOS 作者: (美)Steffen I ...

  3. 【iOS-Cocos2d游戏开发之十四】音频/音效/视频播放(利用Cocos2D-iPhone-Extensions嵌入Cocos2d进行视频播放!)...

    李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2d/482.html 自从Himi ...

  4. 添加类iOS cocos2d 2游戏开发实战(第3版)

    这两天一直在学习添加类之类的问题,现在正好有机会和大家讨论一下. 第1章 简介 1 1.1 第3版中的新增内容 2 1.2 选择ios版cocos2d的来由 3 1.2.1 收费 3 1.2.2 开源 ...

  5. 【Visual C++】游戏开发五十四 浅墨DirectX教程二十一 视觉的诡计 公告板 Billboard 技术

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  6. 【Visual C++】游戏开发五十四 浅墨DirectX教程二十一 视觉的诡计:公告板(Billboard)技术...

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 作者:毛星云(浅墨)   微博:@浅墨_毛星云邮箱: happylifemxy@163.com I'm back~,这段时间大家久等了~ ...

  7. 【Visual C++】游戏开发笔记十四 游戏画面绘图(四) 华丽的CImage类

    本系列文章由zhmxy555编写,转载请注明出处. http://qianmo.blog.51cto.com/5127279/875711 作者:毛星云 邮箱: happylifemxy@qq.com ...

  8. 农场游戏开发记录十四

    今天完善了买种子的方法和流程,算是终于完成了所有方法和流程的测试,并且更新了一览图,修正了一些不符合命名规则的一些方法名称.下一步该写控制台交互界面了.没想到这一阶段这么快就完成了,而且我有点不敢开始 ...

  9. 【通知】▁▂▃ Himi 最新著作《iOS游戏编程之从零开始—Cocos2d-x与cocos2d引擎游戏开发》★书籍源码+第4/5/6样章★-免费下载★ ▃▂▁

    2013年新年,Himi的第二本著作:<iOS游戏编程之从零开始-Cocos2d-x与cocos2d引擎游戏开发>一书正式发售: (大家可以到新华书店.淘宝.拍拍.当当.亚马逊等进行购买) ...

最新文章

  1. 假如有人今天把支付宝的存储服务器炸了,支付宝里的钱是不是就没了。。。...
  2. 导出excel--多个sheet
  3. Git权威指南-51CTO读书
  4. Codeforces 472D
  5. C++读取与保持图片
  6. Mac系统中MongoChef链接MongoDB集群的方法
  7. LeetCode 1238. 循环码排列(格雷编码+旋转数组)
  8. GBDT是如何成为推荐系统顶级工具人的?
  9. 目录浏览器对话框控件 c# 1614822374
  10. 【Mac】mac移动查找的图片到某个目录
  11. 【NOIP2014】【Luogu2118】比例简化(枚举)
  12. VScode:创建用户代码片段
  13. PHP实现文件下载两种方式(a标签和header标签)
  14. 互联网日报 | 5月6日 星期四 | 阿里巴巴旗下“天猫香港”上线试营业;蔚来汽车将进军海外市场;五一档票房超16亿创新高...
  15. 使用Java读写dbf文件【附源代码】
  16. Bugzilla的维护与管理
  17. UNITY3D报错 bug reporter
  18. Vue项目中如何解决error: failed to push some refs to ‘xxx(远程库)‘ git push失败的解决方案
  19. 理解ASP.NET Core - 发送Http请求(HttpClient)
  20. 【智利支付】智利外贸收款方式Servipag

热门文章

  1. c语言xml序列化,C# XML和实体类之间相互转换(序列化和反序列化)
  2. 服务器的操作系统分哪几类,服务器的操作系统分哪几类
  3. phpsso.php 注入漏洞,PHPCMS各种注入漏洞补丁
  4. Java项目:CRM客户管理系统(java+SSM+jsp+mysql+maven)
  5. button按钮样式_一篇文章带你了解CSS3按钮知识
  6. CSS之常用选择器(元素、id、类、通配选择器)
  7. mysql 查看当前事务id,MySQL 如何查询当前最新事务ID
  8. 曲线图实现,可滚动曲线图,自定义数据
  9. iOS Named colors do not work prior to iOS 11.0问题解决
  10. Swift 教學:如何使用iOS Charts API 製作漂亮的圖表