Created
May 19, 2013 04:23
-
-
Save kuroyam/5606680 to your computer and use it in GitHub Desktop.
cocos2dのGLViewをViewController単位で生成・破棄できるようにするためのコード
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#import <UIKit/UIKit.h> | |
#import "cocos2d.h" | |
@class GameViewManager; | |
@interface AppController : NSObject <UIApplicationDelegate> | |
{ | |
UIWindow *window_; | |
} | |
//@property (nonatomic, retain) UIWindow *window; | |
@property (nonatomic, retain) UINavigationController *navController; | |
@property (nonatomic, retain) GameViewManager *viewManager; | |
@end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#import "AppDelegate.h" | |
#import "MenuViewController.h" | |
#import "GameViewManager.h" | |
@implementation AppController | |
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions | |
{ | |
// Create the main window | |
window_ = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; | |
// Create a Navigation Controller with the Director | |
self.navController = [[UINavigationController alloc] initWithRootViewController:[[MenuViewController alloc] init] ]; | |
self.navController.navigationBarHidden = YES; | |
// set the Navigation Controller as the root view controller | |
// [window_ addSubview:navController_.view]; // Generates flicker. | |
[window_ setRootViewController:self.navController]; | |
// make main window visible | |
[window_ makeKeyAndVisible]; | |
self.viewManager = [GameViewManager sharedManager]; | |
//self.viewManager.navController = self.navController; | |
return YES; | |
} | |
// Supported orientations: Landscape. Customize it for your own needs | |
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation | |
{ | |
return UIInterfaceOrientationIsPortrait(interfaceOrientation); | |
} | |
// getting a call, pause the game | |
-(void) applicationWillResignActive:(UIApplication *)application | |
{ | |
//if( [navController_ visibleViewController] == director_ ) | |
//[director_ pause]; | |
} | |
// call got rejected | |
-(void) applicationDidBecomeActive:(UIApplication *)application | |
{ | |
//if( [navController_ visibleViewController] == director_ ) | |
//[director_ resume]; | |
} | |
-(void) applicationDidEnterBackground:(UIApplication*)application | |
{ | |
//if( [navController_ visibleViewController] == director_ ) | |
//[director_ stopAnimation]; | |
} | |
-(void) applicationWillEnterForeground:(UIApplication*)application | |
{ | |
//if( [navController_ visibleViewController] == director_ ) | |
//[director_ startAnimation]; | |
} | |
// application will be killed | |
- (void)applicationWillTerminate:(UIApplication *)application | |
{ | |
CC_DIRECTOR_END(); | |
} | |
// purge memory | |
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application | |
{ | |
[[CCDirector sharedDirector] purgeCachedData]; | |
} | |
// next delta time will be zero | |
-(void) applicationSignificantTimeChange:(UIApplication *)application | |
{ | |
[[CCDirector sharedDirector] setNextDeltaTimeZero:YES]; | |
} | |
- (void) dealloc | |
{ | |
[window_ release]; | |
[self.navController release]; | |
[self.viewManager release]; | |
[super dealloc]; | |
} | |
@end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#import <Foundation/Foundation.h> | |
#import "cocos2d.h" | |
@interface GameViewManager : NSObject <CCDirectorDelegate> | |
@property (nonatomic, retain) UIViewController *viewController; | |
@property (nonatomic, assign) UINavigationController *navController; | |
@property (readonly) CCDirectorIOS *director; | |
+ (GameViewManager*)sharedManager; | |
- (void)setUpDirector; | |
- (void)pop; | |
@end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#import "GameViewManager.h" | |
#import "MenuViewController.h" | |
#import "AppDelegate.h" | |
#import "GameScene.h" | |
@implementation GameViewManager | |
static GameViewManager *_sharedInstance = nil; | |
+ (GameViewManager *)sharedManager | |
{ | |
if (!_sharedInstance) { | |
_sharedInstance = [[self alloc] init]; | |
} | |
return _sharedInstance; | |
} | |
- (id)init | |
{ | |
self = [super init]; | |
if (self) { | |
NSLog(@"%@: %@", NSStringFromSelector(_cmd), self); | |
} | |
return self; | |
} | |
- (void)dealloc | |
{ | |
NSLog(@"%@: %@", NSStringFromSelector(_cmd), self); | |
_sharedInstance = nil; | |
[super dealloc]; | |
} | |
- (void)setUpDirector | |
{ | |
// Create an CCGLView with a RGB565 color buffer, and a depth buffer of 0-bits | |
CCGLView *glView = [CCGLView viewWithFrame:[[UIScreen mainScreen] bounds] | |
pixelFormat:kEAGLColorFormatRGB565 //kEAGLColorFormatRGBA8 | |
depthFormat:0 //GL_DEPTH_COMPONENT24_OES | |
preserveBackbuffer:NO | |
sharegroup:nil | |
multiSampling:NO | |
numberOfSamples:0]; | |
_director = (CCDirectorIOS*) [CCDirector sharedDirector]; | |
_director.wantsFullScreenLayout = YES; | |
// Display FSP and SPF | |
[_director setDisplayStats:YES]; | |
// set FPS at 60 | |
[_director setAnimationInterval:1.0/60]; | |
// attach the openglView to the director | |
[_director setView:glView]; | |
// for rotation and other messages | |
[_director setDelegate:self]; | |
// 2D projection | |
[_director setProjection:kCCDirectorProjection2D]; | |
// [director setProjection:kCCDirectorProjection3D]; | |
// Enables High Res mode (Retina Display) on iPhone 4 and maintains low res on all other devices | |
if( ! [_director enableRetinaDisplay:YES] ) | |
CCLOG(@"Retina Display Not supported"); | |
// Default texture format for PNG/BMP/TIFF/JPEG/GIF images | |
// It can be RGBA8888, RGBA4444, RGB5_A1, RGB565 | |
// You can change anytime. | |
[CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888]; | |
// If the 1st suffix is not found and if fallback is enabled then fallback suffixes are going to searched. If none is found, it will try with the name without suffix. | |
// On iPad HD : "-ipadhd", "-ipad", "-hd" | |
// On iPad : "-ipad", "-hd" | |
// On iPhone HD: "-hd" | |
CCFileUtils *sharedFileUtils = [CCFileUtils sharedFileUtils]; | |
[sharedFileUtils setEnableFallbackSuffixes:NO]; // Default: NO. No fallback suffixes are going to be used | |
[sharedFileUtils setiPhoneRetinaDisplaySuffix:@"-hd"]; // Default on iPhone RetinaDisplay is "-hd" | |
[sharedFileUtils setiPadSuffix:@"-ipad"]; // Default on iPad is "ipad" | |
[sharedFileUtils setiPadRetinaDisplaySuffix:@"-ipadhd"]; // Default on iPad RetinaDisplay is "-ipadhd" | |
// Assume that PVR images have premultiplied alpha | |
[CCTexture2D PVRImagesHavePremultipliedAlpha:YES]; | |
// and add the scene to the stack. The director will run it when it automatically when the view is displayed. | |
[_director pushScene: [GameScene scene]]; | |
} | |
- (void)pop | |
{ | |
AppController *app = [[UIApplication sharedApplication] delegate]; | |
[app.navController popViewControllerAnimated:YES]; | |
[[[CCDirector sharedDirector] view] removeFromSuperview]; | |
[[CCDirector sharedDirector] end]; | |
NSLog(@"nav: %@", app.navController); | |
} | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment