1 #import <Foundation/Foundation.h> 2 #import "cocos2d.h" 3 4 @interface PauseLayerProtocol: CCNode 5 6 -(void)pauseLayerDidPause; 7 -(void)pauseLayerDidUnpause; 8 9 @end 10 11 @interface PauseLayer : CCLayerColor 12 { 13 PauseLayerProtocol * delegate; 14 } 15 16 @property (nonatomic,assign)PauseLayerProtocol * delegate; 17 18 + (id) layerWithColor:(ccColor4B)color delegate:(PauseLayerProtocol *)_delegate ; 19 - (id) initWithColor:(ccColor4B)c delegate:(PauseLayerProtocol *)_delegate; 20 -(void)pauseDelegate; 21 22 @end
1 #import "PauseLayer.h" 2 3 @implementation PauseLayer 4 @synthesize delegate; 5 6 + (id) layerWithColor:(ccColor4B)color delegate:(id)_delegate 7 { 8 return [[[self alloc] initWithColor:color delegate:_delegate] autorelease]; 9 } 10 11 - (id) initWithColor:(ccColor4B)c delegate:(id)_delegate 12 { 13 self = [super initWithColor:c]; 14 CGSize wins = [[CCDirector sharedDirector] winSize]; 15 delegate = _delegate; 16 [self pauseDelegate]; 17 if (self != nil) 18 { 19 CCSprite * background = [CCSprite spriteWithSpriteFrameName:@"background.png"]; 20 [self addChild:background]; 21 22 CCSprite *backBtn = [CCSprite spriteWithSpriteFrameName:@"back.png"]; 23 CCSprite *resumeGameBtn = [CCSprite spriteWithSpriteFrameName:@"newBegin.png"]; 24 CCMenuItemImage *back = [CCMenuItemImage itemFromNormalSprite:backBtn 25 selectedSprite:nil 26 target:self 27 selector:@selector(goBack:)]; 28 CCMenuItemImage *resumeGame = [CCMenuItemImage itemFromNormalSprite:resumeGameBtn 29 selectedSprite:nil 30 target:self 31 selector:@selector(resumeGame:)]; 32 CCMenu * menu = [CCMenu menuWithItems:back, resumeGame, nil]; 33 [menu setPosition:ccp(0,0)]; 34 35 [back setPosition:ccp([background boundingBox].size.width/2,[background boundingBox].size.height * 0.75)]; 36 [resumeGame setPosition:ccp(back.position.x , back.position.y - 40)]; 37 38 [background addChild:menu]; 39 [background setPosition:ccp(wins.width * 0.5, wins.height * 0.5)]; 40 } 41 return self; 42 } 43 44 -(void)pauseDelegate 45 { 46 if([delegate respondsToSelector:@selector(pauseLayerDidPause)]) 47 [delegate pauseLayerDidPause]; 48 [delegate onExit]; 49 [delegate.parent addChild:self z:10]; 50 } 51 52 -(void)goBack: (id)sender 53 { 54 [delegate onEnter]; 55 if([delegate respondsToSelector:@selector(pauseLayerDidUnpause)]) 56 [delegate pauseLayerDidUnpause]; 57 [self.parent removeChild:self cleanup:YES]; 58 } 59 60 -(void) resumeGame: (id)sender 61 { 62 [self performSelector:@selector(goBack:)]; 63 64 GameScene *gameScene = [GameScene sharedGameScene]; 65 [gameScene removeAllChildrenWithCleanup:YES]; 66 [gameScene resetGame]; 67 } 68 69 -(void)dealloc 70 { 71 [super dealloc]; 72 } 73 74 @end
游戏界面的调用
-(void) doPause
{
[GameCoversetIsGameCoverPressed:NO];
ccColor4B c = {0,0,0,150};
[PauseLayerlayerWithColor:c delegate:(PauseLayerProtocol *)];
}