从一开始觉得没有必要,到觉得非常好用,我经历了大概两个月的时间,下面来总结一下什么情况下使用这种结构吧。
第一种情况:当加载文件的时候,如果加载文件失败,需要报错的时候。
当前,可以用try{}catch(){}finally{}这种结构,但是这样做会极大的增加编译后文件的大小,使用do{}while(0)加上CC_BREAK_IF就能实现一样的效果,而且不增加文件的大小。
下面是一个例子:
@H_502_12@
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
bool GameScene::setScene()
{
do
{
auto node = SceneReader::getInstance()->createNodeWithSceneFile(
"publish/GameScene.csb"
);
CC_BREAK_IF(!node);
m_UI_Background->addChild(node);
auto Checkerboard = (ComRender*)(node->getChildByTag(
10009
)->getComponent(
"GUIComponent"
));
CheckerboardUI = Checkerboard->getNode();
//设置按钮
m_btn_Setting = dynamic_cast<button*>(CheckerboardUI->getChildByName(
"Button_Setting"
));
CC_BREAK_IF(!m_btn_Setting);
//音乐按钮
m_btn_Music = dynamic_cast<button*>(CheckerboardUI->getChildByName(
"Button_Music"
));
CC_BREAK_IF(!m_btn_Music);
//棋盘锁
m_btn_Lock = dynamic_cast<button*>(CheckerboardUI->getChildByName(
"Button_Lock"
));
CC_BREAK_IF(!m_btn_Lock);
//棋盘图片
m_Image_Checkerboard = dynamic_cast<imageview*>(CheckerboardUI->getChildByName(
"Image_Checkerboard"
));
CC_BREAK_IF(!m_Image_Checkerboard);
m_Checkerboard = Checkerboard::create(m_Image_Checkerboard);
auto SelectPeople = (ComRender*)(node->getChildByTag(
10031
));
SelectPeopleUI = SelectPeople->getNode();
this
->setCampBtn();
return
true
;
}
while
(
0
);
CCLOG(
"ERROR:Load Resources Fail in GameScene::setScene"
);
false
;
}</imageview*></button*></button*></button*>
|