【iOS-cocos2d-X 游戏开发之十四】Xcode中c++&Object-C混编,详细介绍

本站文章均为
http://www.himigame.com/about-himi原创,转载务必在明显处注明:
转载自
http://www.himigame.com/ 原文链接: http://www.himigame.com/iphone-cocos2dx/743.html

http://list.qq.com/cgi-bin/qf_invite?id=acfc24e272cc4a26debf3b3866edb626a9ea3fc80fd8893c 本博客最新动态!及时将最新博文通知您!Cocos2dx系列博文的上一篇详细介绍了如何在Xcode中利用jni调用Android的Java层代码,还没有看过的童鞋,请移步到如下博文:http://www.himigame.com/iphone-cocos2dx/www.himigame.com/android-game/725.html本篇继续介绍另外一个在Cocos2dx中必经之路:在Cocos2dx中调用苹果Api以实现后期iOS的GameCenter和iap的相关操作, 那么Himi这里就跟大家简单分享探讨下;如何在Xcode中进行c++与oc混编吧~参考王哥说的 SimpleAudioEngine 类;http://www.himigame.com/wp-content/uploads/2012/04/walzerSay.png

首先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 = ;
    NSLog(@"%@",str);
}
 
+(void) hMessageBox:(NSString*)pszMsg title:(NSString*)pszTitle{
 
    UIAlertView * messageBox =  initWithTitle: pszTitle
                                                          message: pszMsg
                                                         delegate: nil
                                                cancelButtonTitle: @"OK"
                                                otherButtonTitles: nil];
    ;
    ;
}
 
@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代码
    ;
    ;
    ;
#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,看运行效果:

  • 本帖最后由 romejiang 于 2012-4-18 11:57 编辑 *

http://cocos2d.cocoachina.com/bbs/forum.php?mod=viewthread&tid=308&extra=page%3D1
http://cocos2d.cocoachina.com/bbs/forum.php?mod=viewthread&tid=310&extra=page%3D1
http://cocos2d.cocoachina.com/bbs/forum.php?mod=viewthread&tid=312&extra=page%3D1
http://cocos2d.cocoachina.com/bbs/forum.php?mod=viewthread&tid=314&extra=page%3D1
http://cocos2d.cocoachina.com/bbs/forum.php?mod=viewthread&tid=316&extra=page%3D1
http://cocos2d.cocoachina.com/bbs/forum.php?mod=viewthread&tid=318&extra=page%3D1
http://cocos2d.cocoachina.com/bbs/forum.php?mod=viewthread&tid=320&extra=page%3D1
http://cocos2d.cocoachina.com/bbs/forum.php?mod=viewthread&tid=322&extra=page%3D1
http://cocos2d.cocoachina.com/bbs/forum.php?mod=viewthread&tid=324&extra=page%3D1
http://cocos2d.cocoachina.com/bbs/forum.php?mod=viewthread&tid=326&extra=page%3D1
http://cocos2d.cocoachina.com/bbs/forum.php?mod=viewthread&tid=328&extra=page%3D1
http://cocos2d.cocoachina.com/bbs/forum.php?mod=viewthread&tid=330&extra=page%3D1
http://cocos2d.cocoachina.com/bbs/forum.php?mod=viewthread&tid=332&extra=page%3D1
http://cocos2d.cocoachina.com/bbs/forum.php?mod=viewthread&tid=334&extra=page%3D1

楼上好心人,辛苦!:stuck_out_tongue_winking_eye:

— Begin quote from ____

romejiang 发表于 2012-4-18 11:36 url

【iOS-cocos2d-X游戏开发之一】在Mac下结合Xcode搭建Cocos2d-X开发
【iOS-cocos2d-X游戏开发之二】【必看篇 …

— End quote

有心人,支持。

都是好人啊。。