【IOS-COCOS2D-X 游戏开发之十四】XCODE中C++&OBJECT-C混编,详细介绍如何在COCOS2DX中访问OBJECT函数以及APPLE API

本站文章均为 李华明Himi 原创,转载务必在明显处注明: 
转载自【黑米GameDev街区】 原文链接: 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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

//

//  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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

//

//  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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

//

//  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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

//

//  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中加入以下测试代码:

1

2

3

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,看运行效果:

时间: 2024-12-31 16:26:35

【IOS-COCOS2D-X 游戏开发之十四】XCODE中C++&OBJECT-C混编,详细介绍如何在COCOS2DX中访问OBJECT函数以及APPLE API的相关文章

【ANDROID游戏开发二十四】360°平滑游戏摇杆(触屏方向导航)

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/384.html 此章节为正在创作的游戏开发书籍书稿中的一部分,由于写书的缘故很久没有更新了,挺对不起大家的:那么今天放出书稿中的一部分,让大家先睹为快吧: 在Android系统的手机,有的根本没有实体的上下左右导航按键,所以很多游戏都会有利用Android手机都具有触屏的特性,制作360度摇杆来取代游戏方向键,这样

【IOS-COCOS2D-X 游戏开发之十】自定义CCSPRITE/LAYER/CCNODE及静态类模版&自定义类细节说明&COCOS2DX触屏事件讲解

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2dx/699.html 这里Himi又来了一篇基础篇-..不是因为充博文数量,而是Cocos2dX一个超级群里不少童鞋都有问过很基础的问题,Himi估计这些童鞋要么之前对C++不熟悉,要么就是之前没有接触过Cocos2d,而直接转入了Cocos2dx的开发行列中仂,这里首先给这些童鞋三个建议: 1. Cocos2dx

【IOS-COCOS2D-X 游戏开发之十一】NEW CCSPRITE()带来的错误&使用CCUSERDEFAULT及PVR.CCZ在COCOS2DX中要注意!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2dx/703.html 本章讲解的是几个细节问题,但是此细节有可能导致一系列问题,那么今天Himi与童鞋们共同交流分享下: 一.   对于CCSprite 与 CCNode  是都很常用的类,那么基础使用方法这里不赘述,但是CCSprite 与 CCNode在进行添加子类时可能有些童鞋遇到过问题,下面我们详细看下:

【IOS-COCOS2D游戏开发之十四】音频/音效/视频播放(利用COCOS2D-IPHONE-EXTENSIONS嵌入COCOS2D进行视频播放!)

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2d/482.html 今天Himi为大家讲解如何在cocos2d中视频.音乐.音效的播放教程:    首先介绍音乐.音效的播放: 音频与音效的播放很简单,毕竟cocos2d引擎为我们封装好了这一切,直接上代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

【IOS-COCOS2D-X 游戏开发之十二】自定义COCOS2DX摇杆(增强JOYSTICK),增加摇杆跟随用户触点作为摇杆坐标,让摇杆不再死板!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2dx/721.html 对于虚拟摇杆在游戏开发中必不可少,Android方面的是由Himi自己实现封装的,大家可以移步到这里查看详细实现机制: [Android游戏开发二十四]360°平滑游戏摇杆(触屏方向导航)  那么在Cocos2d引擎已提供此摇杆类(Joystick),所以Himi也就懒得重写了,但是Cocos

【IOS-COCOS2D-X 游戏开发之十五】COCOS2DX中响应ANDROID的BACK(返回)与MENU(小房子)事件&&COCOS2DX自动释放粒子内存函数!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2dx/792.html 本篇介绍两个常用知识,一个是粒子的自动释放机制函数,因为不少童鞋说cocos2dx为什么没有? 其实是没找到,这里特意拿出来说下!另外一个是如何响应Android的Menu菜单和Back返回事件的方法: 首先对于Cocos2dx中对于粒子自动释放的函数Himi这里给出,不少童鞋都在群里或者论坛

《Cocos2d 跨平台游戏开发指南(第2版)》一导读

前 言 Cocos2d 跨平台游戏开发指南(第2版)自从2007年创始以来,Apple App Store一直保持着持续增长的势头,每天平均约有500个App提交.其中,大约80%的App是游戏.形成这种局面的部分原因是Apple构建了一个非常棒的生态系统,免费提供操作系统和IDE开发环境,便于普通开发者接触并使用它们.另一部分原因在于Cocos2d框架,它是目前应用最广泛的免费iOS游戏开发框架之一,借助它,开发者能够更方便地开发游戏和App应用. SpriteBuilder把Cocos2d集

Windows 8风格应用开发入门 十四 ShareContract概述及原理

Share Contract概述 我们都知道Windows 8中包含3类不同的Contract:Search Contract.Share Contract.Setting Contract.这三种Application Contract为整合Windows 8体验提供了一致性的编程模型. 现在微博,人人都是非常火的平台,我们很多人都愿意将自己所见所闻在这些平台上进行分享.在我们电脑上可能包含许多个不同的应用,包括社交类. 那么我们怎么将这些应用信息与社交类应用进行分享呢?Windows 8为我

Android简明开发教程十四:Context Menu绘制几何图形

上下文相关菜单(Context Menu)类同PC上按鼠标右键显示的菜单,在Android平台上是长按来激活Context Menu,Context Menu一般用来显示和当前UI内容相关的菜单. Context Menu的用法和Option Menu非常类似: 首先是创建 菜单资源,在res/menu 下新建menu_context_shape.xml,用来显示Oval,Pear,Shape2D: <?xml version="1.0″ encoding="utf-8″?>