Cocoa2D 实现半透明暂停菜单

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


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];



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值