您的位置:首页 > 移动开发 > Cocos引擎

Cocoa2D 实现半透明暂停菜单

2013-01-28 20:09 239 查看
有时候需要实现一个暂停菜单暂停游戏,但菜单自身不暂停(可以有动画),菜单周围都是半透明的(能显示底部的游戏内容),以下代码就是实现此类功能:

PauseLayer.h 
PauseLayer.h

#import <Foundation/Foundation.h>
#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
//
//  PauseLayer.m
//  Pause
//
//  Created by Pablo Ruiz on 06/06/11.
//  Copyright 2011 PlaySnack. All rights reserved.
//

#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


使用如下代码调用:
ccColor4B c={0,0,0,150};
[PauseLayerlayerWithColor:c delegate:self];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息