2011-11-22 50 views
0

寻找在我的MonoTouch游戏中处理方向的正确方法(虽然在Obj-C中的答案很好)。在OpenGL MonoTouch游戏中的定位

我们希望支持LandscapeLeft和LandscapeRight方向,但保留原生操作系统方向,以便音量弹出窗口和通知中心面板不会颠倒。

这是相当混乱,因为有几种方法来完成我们所需要的:

  1. Info.plist设置的
  2. shouldrotate覆盖在UIViewController中
  3. 设置UIDevice.CurrentDevice.Orientation
  4. 或只需挂入NSNotificationCenter并使用OpenGL执行旋转,翻译触摸事件

我得到的最好工作是使用#1和#4,这似乎也是由于性能原因被Apple推荐的。我阅读了一些文档,指出使用OpenGL内容旋转视图(通过选项#2)可能会损害perf,请参阅性能部分中的here。 (我们希望我们的游戏能够在更老的iPod Touch上运行得非常好)

我的问题是,当旋转LandscapeRight时,所有内容都在我的游戏中正确绘制,但音量和通知中心在操作系统中颠倒。

有没有更好的方法来解决这个问题?

我看了看在什么一些其他游戏出现做:

  1. 愤怒的小鸟 - 旋转使用OpenGL,但工作适当LandscapeRight
  2. 跳出 - 用的UIViewController
  3. 旋转
  4. 微小翅膀 - 根本不旋转

我想得到像我的应用程序中的愤怒的小鸟一样的旋转。

回答

1

我在项目目标设置中设置了支持的方向,但我只在没有OpenGL的情况下旋转了一个视图。

// Override to allow orientations other than the default portrait orientation. 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight); 
} 
+0

我没有在我面前的Mac来尝试它,但我觉得我尝试了这个选项,并遇到了我的游戏缩放奇怪的问题。我注意到整个场景中的像素化,好像一切都被拉伸了(也许后缓冲器是肖像,而我的游戏景观)。你注意到你的游戏中存在这个问题吗? – jonathanpeppers

+0

在我的UIView上将ContentMode设置为TopLeft后,您的方法运行良好。我还必须在对GL.Ortho和Gl.Viewport的调用中反转一些坐标。我将不得不等待,看看是否真的有任何性能问题。 – jonathanpeppers

+0

我的确有一个缩放问题 - 这是由于屏幕上的移动以及设备试图重新缩放以使其保持在屏幕上。我允许设置屏幕缩放,但没有将其切换回来以防止在游戏屏幕中出现。 –