从OpenGL视图加载UIView

时间:2010-10-13 22:48:15

标签: iphone uiview opengl-es

我是iPhone编程的新手,实际上是任何类型的编程。近一年来,我一直在教自己C,然后是Objective-C,过去几个月我一直在制作iPhone游戏,到目前为止,我为此感到非常自豪。

无论如何,我已经遇到了一个绊脚石而且我一直试图弄清楚它已经有一段时间了,而且不能,如果有人能指出我正确的方向,我会非常感激。

基本上,当应用程序启动时,它会加载到UIView中,这有点像菜单系统,有“加载游戏”,“查看高分榜”等选项......当按下“加载游戏”时,创建一个OpenGL视图,我的游戏开始播放。当游戏中的宇宙飞船撞向一颗行星时,游戏就会结束,另一个UIView交换显示高分并显示重试的选项。我一直试图让这个UIView交换一段时间,但它似乎似乎不起作用。代码都正确编译,没有任何错误或警告,但当宇宙飞船坠入地球时,没有任何反应。 OpenGL视图保留为主视图,并且不会加载任何其他视图。

这是我的RootViewController类的代码,当按下“加载游戏”时调用drawEAGLView,并在太空飞船崩溃时调用newPage:

- (IBAction)drawEAGLView:(id)sender { //This code is called when "Load Game" is pressed in the first UIView.

 //This function contains the loading code of the OpenGl view, and seems to work well.

 BBSceneController * sceneController = [BBSceneController sharedSceneController];

 // make a new input view controller, and save it as an instance variable
 BBInputViewController * anInputController = [[BBInputViewController alloc] initWithNibName:nil bundle:nil];
 sceneController.inputController = anInputController;
 [anInputController release];
 // init our main EAGLView with the same bounds as the window
 EAGLView * glView = [[EAGLView alloc] initWithFrame:window.bounds];
 sceneController.inputController.view = glView;
 sceneController.openGLView = glView;
 self.view = glView;
 [glView release];

 glView.alpha = 0.0;

 [UIView beginAnimations:@"fadeout" context:nil];
 [UIView setAnimationDuration:0.5f];
 [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
 [UIView setAnimationDelegate:self];
 // Change any animatable properties here
 glView.alpha = 1.0;
 [UIView commitAnimations];


 // set our view as the first window view
 [window addSubview:sceneController.inputController.view];
 [window makeKeyAndVisible];



 // begin the game.
 [sceneController loadScene];
 [sceneController startScene];


}

- (void)newPage //This code is run when the spaceship crashes into the planet.
{

 NSLog(@"ViewTwoLoaded"); //This is logged in the console, which proves the code is being run.

 if(self.viewTwoController == nil)
 {
  ViewTwoController *viewTwo = [[ViewTwoController alloc]
           initWithNibName:@"View2" bundle:[NSBundle mainBundle]]; //View2 is the nib i want to load, but does not load.
  self.viewTwoController = viewTwo;
  [viewTwo release];
 }


 [self.navigationController pushViewController:self.viewTwoController animated:YES];

}

我已经尝试使用谷歌搜索和搜索论坛多年了,但(可能因为我不知道使用的确切正确的术语),我找不到任何东西!

我试图提供尽可能多的信息,任何帮助都将非常感谢!

提前致谢, 克雷格

1 个答案:

答案 0 :(得分:0)

您确定自己在导航控制器中吗?对于OpenGL游戏来说似乎有点奇怪。如果用以下内容替换最后一行会发生什么:

[self presentModalViewController:self.viewTwoController animated:YES];

您正在做的其他一些事情我认为您不需要将glView分配给三个属性。

您也可以像在为glView做的那样将视图添加到窗口中:

[window addSubview:self.viewTwoController.view];

或者甚至可以替换视图,

self.view = self.viewTwoController.view;