【发布时间】:2010-06-29 19:47:31
【问题描述】:
我有一个主要使用标准控件的 iPhone 应用程序。有一个在 OpenGL 中渲染的视图(花式图)。为了节省自己的大量工作,我环顾四周,发现了 Cocos2d。看起来它正是我需要的(OpenGL ES,使用起来相对简单),但我遇到了问题。
我不知道如何限制 Cocos2d 只存在于一个视图中。之前,我在一个视图中实现了我的 OpenGL 东西,并使用一个简单的 ViewController 在导航控制器中呈现它。在这里,Cocos2d 似乎需要做的更多,我不确定如何将它填充到与原始 OpenGL 相同的 ViewController/View 方法中。
更新:这就是我正在做的事情。翻到下一个粗体,看看我现在在做什么。
#import <UIKit/UIKit.h>
@interface CocosController : UIViewController {
UIWindow *window;
}
@property (nonatomic,retain) UIWindow *window;
@end
还有我的 CocosController.m:
#import "CocosController.h"
#import "SomeScene.h"
#import "cocos2d.h"
@implementation CocosController
@synthesize window;
// Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView {
// Initialization code
CC_DIRECTOR_INIT();
CCDirector *director = [CCDirector sharedDirector];
//landscape
[director setDeviceOrientation:kCCDeviceOrientationLandscapeLeft];
[director setDisplayFPS:true];
//turn on multi-touch
EAGLView *cocosView = [director openGLView];
[cocosView setMultipleTouchEnabled:true];
self.view = cocosView;
//default texture formats...
[CCTexture2D setDefaultAlphaPixelFormat:kTexture2DPixelFormat_RGBA8888];
[[CCDirector sharedDirector] runWithScene:[SomeScene scene]];
}
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[[CCDirector sharedDirector] purgeCachedData];
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
- (void)viewDidUnload {
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (void)dealloc {
[[CCDirector sharedDirector] release];
[window release];
[super dealloc];
}
@end
最后,我是如何尝试展示它的(通过按钮点击):
CocosController *cocosController = [[CocosController alloc] init];
[[self navigationController] pushViewController:cocosController animated:true];
这是新方法,但结果相同。
我的 AppDelegate 的 ApplicationDidFinish 部分:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
if( ! [CCDirector setDirectorType:kCCDirectorTypeDisplayLink] )
[CCDirector setDirectorType:kCCDirectorTypeThreadMainLoop];
CCDirector *director = [CCDirector sharedDirector];
[director setDisplayFPS:YES];
state = kStateEnd;
// Add the navigation controller's view to the window and display.
[window addSubview:navigationController.view];
[window makeKeyAndVisible];
return YES;
}
我用来呈现视图的 CocosController:
#import "CocosController.h"
#import "cocos2d.h"
#import "SomeScene.h"
@implementation CocosController
@synthesize mainView;
// Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView {
EAGLView *glview = [EAGLView viewWithFrame:CGRectMake(0, 0, 250,350)];
[mainView addSubview:glview];
CCDirector *director = [CCDirector sharedDirector];
[director setOpenGLView:glview];
CCScene *scene = [CCScene node];
id node = [SomeScene node];
[scene addChild: node];
[director runWithScene:scene];
}
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
- (void)viewDidUnload {
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (void)dealloc {
[super dealloc];
}
@end
这一点来自我拥有的详细信息 ViewController 中的按钮单击,它应该使整个事情出现:
CocosController *cc = [[CocosController alloc]init];
cc.mainView = self.view;
[[self navigationController] pushViewController:cc animated:false];
【问题讨论】:
标签: iphone opengl-es cocos2d-iphone