gpt4 book ai didi

c++ - cocos2d-X 中 bool bRet do while 循环的意义何在?

转载 作者:太空宇宙 更新时间:2023-11-04 15:46:50 24 4
gpt4 key购买 nike

我是 Cocos2D-X 的菜鸟,但我已经编程了很长时间了......我想知道这段代码的意义是什么:

我的困惑主要在于这部分:

bool bRet = false; do { } while(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 返回值,但我对一些事情感到困惑......我对此感到困惑的一个原因是为什么还要这样编程?其次,如果 bRet == false 刚好等于 0,while 循环如何知道什么时候...我是不是漏掉了什么?

我的另一个问题是您如何知道何时使用语法 CCdataType* varName = ...,与 CCdataType *pVarName = ... 我知道第二个是指针,但也许我遗漏了一些东西...我不明白其中的区别。第一个是尊重声明吗?

最佳答案

您的示例遗漏了解释一切的基本部分 - 代码中的真正逻辑。我不是 Cocos 专家,但据我所知,它通常是这样使用的:

bool bRet = false;
do
{
CC_BREAK_IF(!conditionA); // same as if (!conditionA) break;
... some code which possibly sets bRet
CC_BREAK_IF(!conditionB);
... some other code which possibly sets bRet
CC_BREAK_IF(!conditionC);
... some other code which possibly sets bRet
bRet = true;
} while (0);
return bRet;

在这种情况下,它允许代码跳转到 return 语句,而无需求助于 goto 或嵌套一堆 if 语句。将其与此进行比较:

bool bRet = false;
if (conditionA);
{
... some code which possibly sets bRet
if (conditionB)
{
... some other code which possibly sets bRet
if (conditionC);
{
... some other code which possibly sets bRet
}
}
}
bRet = true;

return bRet;

关于c++ - cocos2d-X 中 bool bRet do while 循环的意义何在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15350726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com