cocos2d-x的几个重要概念

最近的一些事情让我的思想发生了很大的变化,最近在解MTK方案的bug时,由于MTK开放的寄存器说明很少,让我深刻的体会了,MTK的turn key是如何毁掉了一大批中国工程师的。并且再次下定决心转学别的领域。驱动实再是做不下去了。

接触cocos2d-x完全是个意外,是在逛CSDN网页时发现的。根据例子一步步走来。教程比较老,很多api都发现了改变。特别是物体碰撞那一块,基本上只能一个一个的发子弹,否则真机上必然hang住(我是做手机的,比较喜欢在真机上debug)。如果有新手遇到类似的问题可以参考如下的代码:

void HelloWorld::update(float dt){
int i,j;
for(int i = 0; i < _projectiles->count();i++ )
{
CCSprite *projectile =(CCSprite *)_projectiles->objectAtIndex(i);
for(int j = 0; j < _targets->count();j++){
CCSprite *target = (CCSprite *)_targets->objectAtIndex(i);
if(projectile->boundingBox().intersectsRect(target->boundingBox())){
_targets->removeObjectAtIndex(j,true);
_projectiles->removeObjectAtIndex(i,true);
this->removeChild(target,true);
this->removeChild(projectile,true);
_projectilesDestroyed++;

break;
}
}
}
}

这段代码避免了在update里不停的申请释放CCArray,尽可能的减少了for循环。并且使用下标去删除objtect的效率比使用object指针去查找删除效率要高。


好了废话不多说,来说说cocos2d-x的架构和几个重要概念:

1.架构 如下图


对于一个Game 的新coder 来讲入门点也是最难点当然是"Cocos2D Graphic"。

2. Cocos2D Graphic的架构如下图:


2.1 CCApplication:初始化程序,获取屏幕方向,系统语言等,不会直接操作。  

在HelloWorld的那个例子中AppDelegate就是继承了CCApplication,

而AppDelegate.cpp 中实现了applicationDidFinishLaunching、applicationsDidEnterBackground、applicationWillEnterForeground这几个函数都是多态实现它的父类的。(Appdelegate继承CCApplication继承CCApplicationProtocol)

而在CCApplication中有个run(),这个函数才是我们work的主要位置(各个平台实现的差异不一样)。以android为例子,java会去System.loadLibaray("game"),而在JNI的main.cpp中:

void Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit(JNIEnv*  env, jobject thiz, jint w, jint h)
{
    if (!CCDirector::sharedDirector()->getOpenGLView())
    {
        CCEGLView *view = CCEGLView::sharedOpenGLView();
        view->setFrameSize(w, h);


        AppDelegate *pAppDelegate = new AppDelegate();
        CCApplication::sharedApplication()->run(); //这里会去掉cocos2d 中我们实现的的入口,在android上也就是applicationDidFinishLaunching()
    }

}


2.2 CCDirector:导演类,负责管理和切换场景。还负责初始化openGL各项参数。

CCDirector 引擎的控制者,控制场景的切换,游戏引擎属性的设置

2.2.1 单实例模式,通过sharedDirector()来取得对象

2.2.2 attachInView()连接OpenGL的SurfaceVive

2.2.3 setDeviceOrientation()设置横竖屏

2.2.4 setDisplayFPS(true)显示fps帧率 //新手做个游戏一直想把左下角的fps的显示去掉,可以尝试一下这个接口

2.2.5 setAnimationInterval(1.0f/60)设置帧率,每少刷新60次

2.2.5 setScreenSize(480,320)设置屏幕分辨率,高于设置的分辨率时,引擎会自动适配

2.2.6 runWithScene()运行场景

2.2.7 replaceScene()替换场景

2.2.8 resume()进行运行状态

2.2.9 pause()暂停

2.2.10 end()结束

2.3 CCNode:引擎中最重要的元素,所有可以被绘制的东西都是派生于此。它可以包含其它CCNode,可以执行定时器操作,可以执行CCAction。

2.4 CCScene :在游戏里,场景就是关卡,关卡有人物和背景构成

2.5 CCLayer从概念上说,布景就是场景里的背景,其实就是层次的概念,这种概念在kjava时代就有,就是手动的把游戏中的场景分层(也有靠地图编辑器实现这一功能的)

2.6 CCSprite:这就很明显了,当然包括主角和敌人,和npc,以我个人的理解,也包括游戏中的动态大图素及机关等

2.7 CCAction:就是人物(CCSprite)拥有的动作 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值