f(sixleaves) = sixleaves

重剑无锋 大巧不工

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  95 随笔 :: 0 文章 :: 7 评论 :: 0 Trackbacks
这是我自己总结的cocos2dx,方便自己查看和复习。所以不一定适合您。
//
//  ImageScene.h
//  sceneDemo
//
//  Created by sixleaves on 14-7-29.
//
//

#ifndef __sceneDemo__ImageScene__
#define __sceneDemo__ImageScene__

#include "cocos2d.h"
class ImageScene : public cocos2d::Layer
{

public:
    static cocos2d::Scene * createScene();
    virtual bool init();
    CREATE_FUNC(ImageScene);
};

#endif /* defined(__sceneDemo__ImageScene__) */
/*
 总结:
 知识点一:
 Scene场景类、Layer层的概念
 其实Scene是一对多得关系,一个场景类可以有多个Layer层。
 实质上Scene就是由Layer层构成的。他们的关系,你可以看成
 是树的结构,而且Scene和Layer都继承自Node类,所以其都
 能有addChild方法,所以Scene可以把Layer添加进去。
 
 知识点二:宏定义的两个应用
 1.在预编译时期的过滤应用(防御性措施)
 #ifndef __xxXXxxX_H__
 #define __xxXXxxX_H__
 insert #include code
 #endif
 这样在当包含两次时,就会过滤掉下一次包含。
 2.宏函数
 可以查看CREATE_FUNC的定义:
 如下
        #define CREATE_FUNC(__TYPE__) \
        static __TYPE__* create() \
        { \
        __TYPE__ *pRet = new __TYPE__(); \
        if (pRet && pRet->init()) \
        { \
        pRet->autorelease(); \
        return pRet; \
        } \
        else \
        { \
        delete pRet; \
        pRet = NULL; \
        return NULL; \
        } \
        }
“\”号的意义:首先宏函数其实本质上必须写成一行,
           而\只是在编程中对于不方便写在一行的代码的格式化
           它告诉编译器,我这一行还没结束,把下面的继续整合
           上来成为一行。而在此处,这样写是为了提高可读性。
该函数的作用:创建指定对象,并且调用这个对象的构造函数(init)。
 
知识点三:C++中的多态
对于同一个父类的类,调用的方法,取决于对象,这种形式的多态
需要将父类中相应地方法定义为virutal即可。其实这就是java
中的尽量使用借口引用的原因、其就是为了适应多态,区别在于C++
中比较啰嗦,而java是默认就是有virtual这种功能的。不用你再写
明。
所以为了能够在创建这个对象后调用其构造函数init。需要重写它
这就是为什么其父类将其声明为virtual的原因。至于createScene
纯粹就是工厂方法。
 
*/

createScene主要还是分别调用Scene类和自定义layer类的工厂方法create创建对象,让后将其添加到Scene对象中。
//
//  ImageScene.cpp
//  sceneDemo
//
//  Created by sixleaves on 14-7-29.
//
//

#include "ImageScene.h"
USING_NS_CC;

Scene * ImageScene::createScene() {
    auto scene = Scene::create();
    auto imageScene = ImageScene::create();
    scene->addChild(imageScene);
    return scene;
}


bool ImageScene::init() {
    Size size = Director::getInstance()->getVisibleSize();
    auto sprite = Sprite::create("CloseSelected.png");
    sprite->setPosition(size.width/2, size.height/2);
    addChild(sprite);
    return true;
}
posted on 2014-07-30 15:49 swp 阅读(275) 评论(0)  编辑 收藏 引用 所属分类: cocos2dx

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理