axmol/CODING_STYLE.md

132 lines
4.0 KiB
Markdown
Raw Normal View History

# cocos2d-x C++ coding sytle
## Detailed information
Please, refer to this document for a detailed version of the cocos2d-x C++ coding sytle:
* [cocos2d-x c++ coding style](http://www.cocos2d-x.org/wiki/Cocos2d_c++_coding_style)
## Quick Sample
Use this sample as a quick reference. But DO READ the detailed doc for more info.
Header file:
```c++
/**
* We use Doxygen strings for documentation.
* All public classes, methods, structs should be documented using Doxygen Strings
*/
class CC_DLL Sprite : public NodeRGBA, public TextureProtocol
{ /* class braces start in a new line */
/* no indentation here for public, protected or private */
/* First add all the "public" stuff, then all the "protected" stuff, and finally all the "private" stuff
public:
/* we don't use tabs, we use spaces, and we use a 4 space identation */
/* 1st add all static const */
static const int INDEX_NOT_INITIALIZED = -1;
/* then add all the creators and other relevant static methods */
static Sprite* create();
static Sprite* create(const char *filename);
static Sprite* create(const char *filename, const Rect& rect);
/* if applicable, then add the consturctors / destructors */
Sprite();
virtual ~Sprite(void);
/* then add all the initialization methods */
/* notice that they are in the same order as the creators */
virtual bool init(void);
virtual bool initWithTexture(Texture2D *texture);
virtual bool initWithTexture(Texture2D *texture, const Rect& rect);
/* then add the regular instace methods */
virtual void updateTransform(void);
virtual SpriteBatchNode* getBatchNode(void);
virtual void setBatchNode(SpriteBatchNode *spriteBatchNode);
/* then add all the overriden methods */
/* notice that all overriden methods must use the 'override' keyword */
/* overriden methods are not forced to have doxygen strings UNLESS they change the behavior in a non obvios way */
virtual void setPosition(const Point& pos) override;
virtual void setRotation(float rotation) override;
virtual void setRotationX(float rotationX) override;
/* once you finish with the 'public' methods, start with the 'protected' ones */
protected:
/* protected methods are not forced to have Doxygen strings, but if they have it, better */
void updateColor(void);
virtual void setTextureCoords(Rect rect);
/* After adding all the methods, add the ivars */
/* all ivars must start with _ */
/* Do not use Hungarian notation */
TextureAtlas* _textureAtlas;
int _atlasIndex;
SpriteBatchNode* _batchNode;
};
```
Implementation file:
```c++
/* Do not use doxygen comments on the implementation file */
/* The methos MUST be in the same order as where declared in the header file */
Sprite* Sprite::create(const char *filename)
{
/* Don't use tabs. Use spaces. Use 4-space indentation */
Sprite *sprite = new Sprite();
/* put curly braces in the same line as in the 'if'*/
/* leave a space between the 'if' and the '(' */
/* don't leave spaces between '()' */
if (sprite && sprite->initWithFile(filename)) {
sprite->autorelease();
return sprite;
}
CC_SAFE_DELETE(sprite);
return NULL;
}
/* Initialization list can be indented to 0 spaces, or to 4 spaces. If in doubt, be consistent with the indentation already used in the file */
/* Only use the Initialization lists for types that can't fail when initialized */
Sprite::Sprite()
: _shouldBeHidden(false)
, _texture(nullptr)
, _physicsBody(nullptr)
{
}
/* use the 'initXXX' methods to initialize types that might fail */
bool Sprite::initWithTexture(Texture2D *texture, const Rect& rect, bool rotated)
{
/* it ok not use use curly braces */
if (something)
do_something();
else
something_else();
/* but if you use curly branches in one branch, all the branches should use curly branches */
if (something) {
do_something1();
do_something2();
} else {
so_something_else();
}
}
```