Cocos API风格说明(摘自官方文档)
适用版本:v3.0-beta2及更高版本 两阶段构造器及静态create()函数在Cocos2d-x引擎中,我们使用了两阶段构造器,这不仅指Objective-C实现文件(implementation),也与Symbian SDK及Bada SDK相似。我认为这一举措在C++编程中很不错。 第一阶段是运行C++类构造器。在C++类的默认构造器中,成员变量须设定为默认值。但我们不应在默认构造器中编写任何逻辑。例如 MyClass::MyClass() // c++ class constructor
:_data(NULL) // set all member variables to default values,_flag(false),_count(0)
{
memset(_array,0,sizeof(_array)); // only set default values here,but not logics
}
我们之所以不应在这里编写任何逻辑,是因为C++默认构造器不能返回表明我们逻辑正确与否的bool 值。 使用C++关键词 第二阶段是调用MyClass::init()函数,如下。 bool MyClass::initWithFilename(const std::string& filename)
{
// just take loading texture as a sample,this behaviour can fail if the image file doesn't exist.
bool bReturnValue = loadTextureIntoMemory(filename);
return bReturnValue;
}
所以,我们可以构建如下 MyClass* obj = new MyClass;
if (true == obj->initWithFilename("texture.png"))
{
// congratulations,go ahead!
}
else
{
// error process
}
在Cocos2d-x引擎中,我们已对这一两阶段构造器进行包装,并在静态函数create()中自动释放引用计数。除了单例模式,每一个cocos2d类都有自己的static CCClass* CCClass::create(...)方法。极力推荐这一方法。代码样本: Sprite* monster = Sprite::create("Monster.png");
monster->setPosition(ccp(visibleSize.width/2 + origin.x,visibleSize.height/2 + origin.y));
this->addChild(monster);
所以,如果你希望新建cocos2d的对象,比如Sprite,Label,Action,你必须首先从头文件或API文件中找到它的CocosClass::create() 方法。 doSomething()这是最常见的函数名,在Cocos2d-x/-html5引擎中处处都有应用到。第一个字是一个动词,第二个字是一个名词。比如:initWithTexture(CCTexture*) 和initWithFilename(const std::string&) 中,你经常可以看见这一函数名。
onEventCallback()当你看到类似create() ,只发现了getInstance() 方法,它就属于单例模式类。比如,TextureCache::getInstance() 。单例类对应的析构方式是destroyInstance() 。 在v3.0之前,单例类的构造方式是CocosClass::sharedCocosClass() ,比如TextureCache::sharedTextureCache() 。这个方法在v3.0中仍然可以兼容,但不保证在v3.0更后面的版本中仍然保留。
属性因为在C++ 和 C++11中没有"property" (“属性”)这个概念,所以我们在Cocos2d-x引擎中使用了许多getter和setters。
|