Я новичок в Cocos2D-X, но программирую довольно давно... Мне было интересно, в чем смысл этого кода:
моя путаница в основном связана с этой частью:
логический bRet = ложь; сделать { } пока (0)
вот весь метод, чтобы дать некоторый контекст:
bool GameScene::init()
{
CCLog("GameScene::init");
bool bRet = false;
do
{
//////////////////////////////////////////////////////////////////////////
// super init first
//////////////////////////////////////////////////////////////////////////
CC_BREAK_IF(! CCLayer::init());
// Initialize the parent - gets the sprite sheet loaded, sets the background and inits the clouds
MainScene::init();
// Start off as game suspended
gameSuspended = true;
// Get the bird sprite
CCSprite *bird = CCSprite::createWithSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("bird.png"));
this->addChild(bird, 4, kBird);
// Initialize the platforms
initPlatforms();
// Create the bonus sprite
CCSprite *bonus;
// Load in the bonus images, 5, 10, 50, 100
for(int i=0; i<kNumBonuses; i++)
{
bonus = CCSprite::createWithSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(bonus_image[i]));
this->addChild(bonus,4, kBonusStartTag+i);
bonus->setVisible(false);
}
// Create the Score Label
CCLabelBMFont* scoreLabel = CCLabelBMFont::labelWithString("0", "Images/bitmapFont.fnt");
this->addChild(scoreLabel, 5, kScoreLabel);
// Center the label
scoreLabel->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width/2,CCDirector::sharedDirector()->getWinSize().height - 50));
// Start the GameScene stepping
schedule(schedule_selector(GameScene::step));
// Enable the touch events
setTouchEnabled(true);
// Enable accelerometer events
setAccelerometerEnabled(true);
// Start the game
startGame();
bRet = true;
} while (0);
return bRet;
}
этот код взят из: https://code.google.com/p/tweejump-cocos2dx/source/browse/trunk/Classes/GameScene.cpp
это игра с открытым исходным кодом.
Я понимаю, что bRet означает возвращаемое значение bool, но я запутался в нескольких вещах... Одна из причин, по которой меня это смущает, заключается в том, почему даже такая программа? во-вторых, как цикл while узнает, когда bRet == false, если он просто равен 0... я что-то упустил?
Мой другой вопрос: как узнать, когда использовать синтаксис CCdataType* varName = ..., по сравнению с CCdataType *pVarName = ... Я знаю, что второй - это указатель, но, возможно, я что-то упускаю... Я не понимаю разницы. первое заявление почтения?
do { }while(0)
- нет - кажется, чего-то не хватает. - person Voo   schedule 12.03.2013