Cocoa2D 实现半透明暂停菜单

来源:互联网 发布:域名劫持工具 编辑:程序博客网 时间:2024/05/20 21:43

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


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



原创粉丝点击