1.类文件代码
PauseLayer.h
#import
#import "cocos2d.h"
@interface PauseLayerProtocol: CCNode
-(void)pauseLayerDidPause;
-(void)pauseLayerDidUnpause;
@end
@interface PauseLayer : CCLayerColor {
PauseLayerProtocol * delegate;
}
@property (nonatomic,assign)PauseLayerProtocol * delegate;
+ (id) layerWithColor:(ccColor4B)color delegate:(PauseLayerProtocol *)_delegate;
- (id) initWithColor:(ccColor4B)c delegate:(PauseLayerProtocol *)_delegate;
-(void)pauseDelegate;
@end
PauseLayer.m
#import "PauseLayer.h"
@implementation PauseLayer
@synthesize delegate;
+ (id) layerWithColor:(ccColor4B)color delegate:(id)_delegate
{
return [[[self alloc] initWithColor:color delegate:_delegate] autorelease];
}
- (id) initWithColor:(ccColor4B)c delegate:(id)_delegate {
self = [super initWithColor:c];
if (self != nil) {
CGSize wins = [[CCDirector sharedDirector] winSize];
delegate = _delegate;
[self pauseDelegate];
CCSprite * background = [CCSprite spriteWithFile:@"pause_background.png"];
[self addChild:background];
CCMenuItemImage *resume = [CCMenuItemImage itemFromNormalImage:@"pause_btn_resume.png"
selectedImage:@"pause_btn_resume_dwn.png"
target:self
selector:@selector(doResume:)];
CCMenu * menu = [CCMenu menuWithItems:resume,nil];
[menu setPosition:ccp(0,0)];
[resume setPosition:ccp([background boundingBox].size.width/2,[background boundingBox].size.height/2)];
[background addChild:menu];
[background setPosition:ccp(wins.width/2,wins.height/2)];
}
return self;
}
-(void)pauseDelegate
{
if([delegate respondsToSelector:@selector(pauseLayerDidPause)])
[delegate pauseLayerDidPause];
[delegate onExit];
[delegate.parent addChild:self z:10];
}
-(void)doResume: (id)sender
{
[delegate onEnter];
if([delegate respondsToSelector:@selector(pauseLayerDidUnpause)])
[delegate pauseLayerDidUnpause];
[self.parent removeChild:self cleanup:YES];
}
-(void)dealloc
{
[super dealloc];
}
@end
2.如何使用
在实际使用的时候,只需要在游戏的场景层导入PauseLayer.h这个头文件,然后调用以下方法即可:
-(void)doPause
{
ccColor4B c ={0,0,0,150};
[PauseLayer layerWithColor:c delegate:self];
}
用一个简单的HelloWorld项目来测试是正常的:
首先在HelloWorldLayer.m的顶部添加
#import "PauseLayer.h"
在init方法中添加以下代码:
CCMenuItem*pauseButton = [CCMenuItemImage itemWithNormalImage:@"playbutton.png" selectedImage:@"playbutton.png" target:self selector:@selector(doPause)];
pauseButton.position = ccp(size.width*0.3,size.height*0.3);
CCMenu *menu = [CCMenu menuWithItems:pauseButton, nil];
menu.position = CGPointZero;
[self addChild:menu];
然后添加以下方法:
-(void)doPause
{
ccColor4B c = {0,0,0,150};
[PauseLayer layerWithColor:c delegate:self];
}
---------------------------------更新--------------------------------------------
简单的暂停与继续(不需要复杂的菜单选项)可以用pause和resume来实现:
添加一个暂停按钮,在调用的selector方法中添加一个继续按钮,然后[[CCDirector sharedDirector] pause];
在点击继续按钮后调用响应的selector,在这里首先要将继续按钮移除(如果你已经不需要它了):
[self removeChild:continueMenu];
[[CCDirector sharedDirector] resume];