Xcode中c++&Object-C混编,详细介绍如何在cocos2dx中访问object函数以及Apple Api
2013-07-15 18:22
771 查看
转自:http://www.himigame.com/iphone-cocos2dx/743.html
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.m
这个类比较简单,简单定义了几个静态函数,打印和显示一个提示框,不赘述,大家大概看下就可以了;
下面来看c++的类:
HSpriteCPP.h
HSpriteCPP.cpp
此类是个自定义精灵类,都是简单的创建等函数,其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中加入以下测试代码:
别忘记导入对应使用的类哦~OK,看运行效果:
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,看运行效果:
相关文章推荐
- cocos2d-x 学习日志(1)之Xcode中c++&Object-C混编,详细介绍如何在cocos2dx中访问object函数以及Apple Api
- 【iOS-cocos2d-X 游戏开发之十四】Xcode中c++&Object-C混编,详细介绍如何在cocos2dx中访问object函数以及Apple Api
- 【iOS-cocos2d-X 游戏开发之十四】Xcode中c++&Object-C混编,详细介绍如何在cocos2dx中访问object函数以及Apple Api
- Xcode中c++&Object-C混编,详细介绍如何在cocos2dx中访问object函数以及Apple Api
- Xcode中c++&Object-C混编,详细介绍如何在cocos2dx中访问object函数
- XCode里创建的Cocos2d-x项目如何C++与ObjC混编,以及调用APPLE API和ObjC函数
- 如何进入win7安全模式以及安全模式实用技巧的详细介绍
- xcode 中 c++ Standard Library的选择 和 如何混编c++
- opencv IplImage各参数详细介绍以及如何从一个JPEG图像数据指针转换得到IplImage
- Xcode中C、C++、Object-C3种语言的混编
- Xcode中C、C++、Object-C3种语言的混编
- Cocos2dx------详细介绍如何编写扫雷这个游戏含源码(三)
- iOS开发Xcode崩溃在main函数入口时如何定位Bug的一个小方法以及一个恶心的bug介绍
- How to access database using C++ & ADO - 如何用C++和ADO访问数据库
- 介绍了如何取成员函数的地址以及调用该地址:C++
- 【iOS-cocos2d-X 游戏开发之十四】cocos2dx(c++)中访问object函数
- object中的<param>标签的详细介绍
- iphone开发之C++和Objective-C混编 如何在xcode中用C++的STL
- 详细介绍Mysql各种存储引擎的特性以及如何选择存储引擎
- 【iOS-cocos2d-X 游戏开发之十三】详细讲解在Xcode中利用预编译并通过Jni调用Android的Java层代码(cocos2dx里访问调用Android函数)!