本节书摘来异步社区《Cocos2d 跨平台游戏开发指南(第2版)》一书中的第2章,第2.5节,作者: 【印度】Siddharth Shekar(谢卡)译者: 武传海 责编: 胡俊英,更多章节内容可以访问云栖社区“异步社区”公众号查看。
2.5 添加Gameplay场景
当按下play按钮时,游戏应该切换到另一个场景,为此我们需要创建一个新场景,以便从原来的场景切换到新场景。首先,让我们学习一下如何创建一个场景。
2.5.1 准备工作
现在,让我们添加gameplay场景。在第1章中,我们已经学习过如何创建文件,采用相同方法,创建GamePlayScene类文件。
2.5.2 操作步骤
如上,我创建了一个名为GamePlayScene类。GamePlayScene.h文件中包含的代码如下:
#import "CCScene.h"
@interface GameplayScene : CCNode
+(CCScene*)scene;
-(id)initWithLevel:(NSString*)lvlNum
@end
GamePlayScene.m文件包含如下代码:
#import "GameplayScene.h"
#import "cocos2d-ui.h"
@implementation GameplayScene
+(CCScene*)scene{
return[[self alloc]initWithLevel:lvlNum];
}
-(id)initWithLevel:(NSString*)lvlNum{
if(self = [super init]){
CGSize winSize = [[CCDirector sharedDirector]viewSize];
//Basic CCSprite - Background Image
CCSprite* backgroundImage = [CCSprite spriteWithImageNamed:@
"Bg.png"];
backgroundImage.position = CGPointMake(winSize.width/2,
winSize.height/2);
[self addChild:backgroundImage];
CCLabelTTF *mainmenuLabel = [CCLabelTTF labelWithString:@"Gameplay
Scene" fontName:@"AmericanTypewriter-Bold" fontSize: 36.0f];
mainmenuLabel.position = CGPointMake(winSize.width/2, winSize.
height
* 0.8);
self addChild:mainmenuLabel];
CCLabelTTF *levelNumLabel = [CCLabelTTF labelWithString:lvlNum
fontName:@"AmericanTypewriter-Bold" fontSize: 24.0f];
levelNumLabel.position = CGPointMake(winSize.width/2, winSize.
height
* 0.7);
[self addChild:levelNumLabel];
CCButton *resetBtn = [CCButton buttonWithTitle:nil
spriteFrame:[CCSpriteFrame frameWithImageNamed:@
"resetBtn_normal.png"]
highlightedSpriteFrame:[CCSpriteFrame frameWithImageNamed:@
"resetBtn_pressed.png"]
disabledSpriteFrame:nil];
[resetBtn setTarget:self selector:@selector(resetBtnPressed:)];
CCLayoutBox * btnMenu;
btnMenu = [[CCLayoutBox alloc] init];
btnMenu.anchorPoint = ccp(0.5f, 0.5f);
btnMenu.position = CGPointMake(winSize.width/2, winSize.height *
0.5);
[btnMenu addChild:resetBtn];
[self addChild:btnMenu];
}
return self;
}
-(void)resetBtnPressed:(id)sender{
CCLOG(@"reset button pressed");
}
@end
2.5.3 工作原理
GamePlayScene类与MainScene类相似,但是在其中,我们添加了自定义场景和init函数,以便向类中传入字符串形式的难度级别数字。
此外,我们也添加了一个用于显示当前游戏难度级别的标签。
同样地,目前GamePlayScene类不做任何事。但是,在接下来的部分中,我们将学习如何从一个场景过渡到gameplay场景,其中会显示我们当前选择的游戏难度级别。