2011-11-22 25 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

我的確有一個縮放問題 - 這是由於屏幕上的移動以及設備試圖重新縮放以使其保持在屏幕上。我允許設置屏幕縮放,但沒有將其切換回來以防止在遊戲屏幕中出現。 –