【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
- //
- // HSpriteOC.h
- // Oc_Cpp
- //
- // Created by Himi on 12-4-10.
- // Copyright (c) 2012年 Himi. All rights reserved.
- //
- #import <Foundation/Foundation.h>
- NSString * str;
- @interface HSpriteOC
- +(void) testLog;
- +(void) testLogWithStr:(NSString*)_str;
- +(void) hMessageBox:(NSString*)pszMsg title:(NSString*)pszTitle;
- @end
HSpriteOC.m
- //
- // HSprite.m
- // Oc_Cpp
- //
- // Created by Himi on 12-4-10.
- // Copyright (c) 2012年 Himi. All rights reserved.
- //
- #import "HSpriteOC.h"
- @implementation HSpriteOC
- +(void) testLog{
- str = @"Himi->string is: ";
- NSLog(@"HSprite: testLog");
- }
- +(void) testLogWithStr:(NSString*)_str{
- str = [NSString stringWithFormat:@"%@%@",str,_str];
- NSLog(@"%@",str);
- }
- +(void) hMessageBox:(NSString*)pszMsg title:(NSString*)pszTitle{
- UIAlertView * messageBox = [[UIAlertView alloc] initWithTitle: pszTitle
- message: pszMsg
- delegate: nil
- cancelButtonTitle: @"OK"
- otherButtonTitles: nil];
- [messageBox autorelease];
- [messageBox show];
- }
- @end
这个类比较简单,简单定义了几个静态函数,打印和显示一个提示框,不赘述,大家大概看下就可以了;
下面来看c++的类:
HSpriteCPP.h
- //
- // HSpriteCPP.h
- // Oc_Cpp
- //
- // Created by Himi on 12-4-10.
- // Copyright (c) 2012年 Himi. All rights reserved.
- //
- #ifndef Oc_Cpp_HSprite_h
- #define Oc_Cpp_HSprite_h
- #include "cocos2d.h"
- using namespace cocos2d;
- class HSpriteCPP:public cocos2d::CCSprite {
- public:
- static HSpriteCPP* hspriteWithFile(const char *spName);
- void myInit();
- virtual ~HSpriteCPP();
- };
- #endif
HSpriteCPP.cpp
- //
- // HSpriteCPP.mm
- // Oc_Cpp
- //
- // Created by Himi on 12-4-10.
- // Copyright (c) 2012年 Himi. All rights reserved.
- //
- #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
- #include "HSpriteOC.h"
- #endif
- #include "HSpriteCPP.h"
- HSpriteCPP* HSpriteCPP::hspriteWithFile(const char *spName)
- {
- HSpriteCPP *pobSprite = new HSpriteCPP();
- if (pobSprite && pobSprite->initWithFile(spName))
- {
- pobSprite->myInit();
- pobSprite->autorelease();
- return pobSprite;
- }
- CC_SAFE_DELETE(pobSprite);
- return NULL;
- }
- void HSpriteCPP::myInit(){
- #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
- //iOS代码
- [HSpriteOC testLog];
- [HSpriteOC testLogWithStr:@"wahaha"];
- [HSpriteOC hMessageBox:@"cocos2dx调用oc函数" title:@"Himi"];
- #else
- //Android代码
- #endif
- }
- HSpriteCPP::~HSpriteCPP(){
- }
此类是个自定义精灵类,都是简单的创建等函数,其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中加入以下测试代码:
- HSpriteCPP * sp =HSpriteCPP::hspriteWithFile("Icon.png");
- sp->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width*0.5,CCDirector::sharedDirector()->getWinSize().height*0.5-100));
- this->addChild(sp);
别忘记导入对应使用的类哦~OK,看运行效果:
【iOS-cocos2d-X 游戏开发之十四】cocos2dx(c++)中访问object函数相关推荐
- iOS cocos2d 2游戏开发实战(第3版)---你的第一个游戏!
2019独角兽企业重金招聘Python工程师标准>>> 随着苹果公司不断地创新与发展,新的iPhone 5.iPad 4以及iPad mini产品相继问世,包括iOS与Xcode在内 ...
- iOS cocos2d 2游戏开发实战(第3版)
<iOS cocos2d 2游戏开发实战(第3版)> 基本信息 原书名:Learn cocos2d 2: Game Development for iOS 作者: (美)Steffen I ...
- 【iOS-Cocos2d游戏开发之十四】音频/音效/视频播放(利用Cocos2D-iPhone-Extensions嵌入Cocos2d进行视频播放!)...
李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2d/482.html 自从Himi ...
- 添加类iOS cocos2d 2游戏开发实战(第3版)
这两天一直在学习添加类之类的问题,现在正好有机会和大家讨论一下. 第1章 简介 1 1.1 第3版中的新增内容 2 1.2 选择ios版cocos2d的来由 3 1.2.1 收费 3 1.2.2 开源 ...
- 【Visual C++】游戏开发五十四 浅墨DirectX教程二十一 视觉的诡计 公告板 Billboard 技术
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...
- 【Visual C++】游戏开发五十四 浅墨DirectX教程二十一 视觉的诡计:公告板(Billboard)技术...
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 作者:毛星云(浅墨) 微博:@浅墨_毛星云邮箱: happylifemxy@163.com I'm back~,这段时间大家久等了~ ...
- 【Visual C++】游戏开发笔记十四 游戏画面绘图(四) 华丽的CImage类
本系列文章由zhmxy555编写,转载请注明出处. http://qianmo.blog.51cto.com/5127279/875711 作者:毛星云 邮箱: happylifemxy@qq.com ...
- 农场游戏开发记录十四
今天完善了买种子的方法和流程,算是终于完成了所有方法和流程的测试,并且更新了一览图,修正了一些不符合命名规则的一些方法名称.下一步该写控制台交互界面了.没想到这一阶段这么快就完成了,而且我有点不敢开始 ...
- 【通知】▁▂▃ Himi 最新著作《iOS游戏编程之从零开始—Cocos2d-x与cocos2d引擎游戏开发》★书籍源码+第4/5/6样章★-免费下载★ ▃▂▁
2013年新年,Himi的第二本著作:<iOS游戏编程之从零开始-Cocos2d-x与cocos2d引擎游戏开发>一书正式发售: (大家可以到新华书店.淘宝.拍拍.当当.亚马逊等进行购买) ...
最新文章
- 假如有人今天把支付宝的存储服务器炸了,支付宝里的钱是不是就没了。。。...
- 导出excel--多个sheet
- Git权威指南-51CTO读书
- Codeforces 472D
- C++读取与保持图片
- Mac系统中MongoChef链接MongoDB集群的方法
- LeetCode 1238. 循环码排列(格雷编码+旋转数组)
- GBDT是如何成为推荐系统顶级工具人的?
- 目录浏览器对话框控件 c# 1614822374
- 【Mac】mac移动查找的图片到某个目录
- 【NOIP2014】【Luogu2118】比例简化(枚举)
- VScode:创建用户代码片段
- PHP实现文件下载两种方式(a标签和header标签)
- 互联网日报 | 5月6日 星期四 | 阿里巴巴旗下“天猫香港”上线试营业;蔚来汽车将进军海外市场;五一档票房超16亿创新高...
- 使用Java读写dbf文件【附源代码】
- Bugzilla的维护与管理
- UNITY3D报错 bug reporter
- Vue项目中如何解决error: failed to push some refs to ‘xxx(远程库)‘ git push失败的解决方案
- 理解ASP.NET Core - 发送Http请求(HttpClient)
- 【智利支付】智利外贸收款方式Servipag
热门文章
- c语言xml序列化,C# XML和实体类之间相互转换(序列化和反序列化)
- 服务器的操作系统分哪几类,服务器的操作系统分哪几类
- phpsso.php 注入漏洞,PHPCMS各种注入漏洞补丁
- Java项目:CRM客户管理系统(java+SSM+jsp+mysql+maven)
- button按钮样式_一篇文章带你了解CSS3按钮知识
- CSS之常用选择器(元素、id、类、通配选择器)
- mysql 查看当前事务id,MySQL 如何查询当前最新事务ID
- 曲线图实现,可滚动曲线图,自定义数据
- iOS Named colors do not work prior to iOS 11.0问题解决
- Swift 教學:如何使用iOS Charts API 製作漂亮的圖表