cocos2d-x项目中c++调用objective_c
来源:互联网 发布:dnf闪光网络中断 编辑:程序博客网 时间:2024/05/18 02:51
本篇继续介绍另外一个在Cocos2dx中必经之路:在Cocos2dx中调用苹果Api以实现后期iOS的GameCenter和iap的相关操作, 那么Himi这里就跟大家简单分享探讨下;如何在Xcode中进行c++与oc混编吧~
参考王哥说的 SimpleAudioEngine 类;
首先Himi建立了两个类,一个object-c ,一个c++,详细如下:
HSpriteOC.h
HSpriteOC.m
- //
- // 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
- //
- // 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.cpp
- //
- // 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.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,看运行效果:
本文出自 “李华明Himi” 博客,请务必保留此出处http://xiaominghimi.blog.51cto.com/2614927/908852
- cocos2d-x项目中c++调用objective_c
- cocos2d-x中lua与C++,C语言互相调用
- cocos2d-x 中java调用c/c++函数
- cocos2d-x bindings-generator(lua调用c++)
- cocos2d-x bindings-generator(lua调用c++)
- cocos2d-x 中调用oc和java
- quick-cocos2d-x中Lua调用JAVA
- cocos2d-x项目调用当前函数中c++方法替代objc selector
- cocos2d-x 中多线程的c/c++代码通过JNI调用java代码
- cocos2d-x 中多线程的c/c++代码通过JNI调用java代码
- cocos2d-x 中多线程的c/c++代码通过JNI调用java代码
- cocos2d-x 中多线程的c/c++代码通过JNI调用java代码
- Cocos2d-X 在MAC中创建项目
- objective_c调用python脚本
- cocos2d-x横版项目调用 ios UIImagePickerController
- Cocos2d-x调用Java
- cocos2d-x Jni调用
- Cocos2D-X中在C++中调用JAVA的方法
- 使用ServiceStackRedis链接Redis简介
- 中方强调国际刑事法院应尊重有关国家司法传统-国际刑事法院-司法传统
- 设计模式笔记(10 MEDIATOR & MEMENTO)
- XPath
- MFC-ListCtrl 可编辑重写
- cocos2d-x项目中c++调用objective_c
- 特殊的数组排序问题
- 关于创建SQL数据库脚本没有默认值的情况
- Myclipse9 、10 安装svn方法
- 设计模式笔记(11 OBSERVER & STATE)
- JMS发送和接收实例-发布/订阅模式
- Aop中动态横切与静态横切
- 利用栈做行编辑器
- java容器类--------Collection接口解析(一)