2012-10-15 58 views
2

我的遊戲僅適用於風景(屏幕分辨率1024 * 768 - iPad分辨率)。PlayN iOS風景模式

我的遊戲場景在PlayN(Android,html等)支持的每個平臺上正確呈現。只有iOS的問題。

我已經準備爲iPad的屏幕分辨率,設置Info.plist文件,註冊平臺使用IOSPlatform.register(app, IOSPlatform.SupportedOrients.LANDSCAPES);

當我運行有關設備取向我的應用程序的一切是正確的所有資源,但遊戲場景並不完全呈現。它是爲分辨率768 * 768渲染的(並非所有場景對象都可見 - 只有屬於768 * 768矩形的對象纔可見),其餘的屏幕空間爲黑色。

我已經調查了問題的方式如下:

  1. 應用規模轉變爲rootLayer(以確保整個場景渲染)。 PlayN.graphics().rootLayer().setScale(0.75f, 0.75f); 結果 - 遊戲場景適合768 * 768矩形,我可以看到所有遊戲場景對象。
  2. 將轉換應用到rootLayer(確保PlayN不渲染768 * 768矩形以外的場景)。 PlayN.graphics().rootLayer().setTranslation(1024.0f - 768.0f, 0.0f); 結果 - 翻譯遊戲場景,但不屬於768 * 768屏幕矩形的對象不可見。

我的猜測是PlayN準備了768 * 1024屏幕分辨率(默認的iPad方向分辨率)的繪圖環境。當它渲染屏幕時,位於768 * 1024矩形外部的對象被裁剪(未呈現)。

任何幫助或想法可能會導致這種奇怪的行爲將不勝感激。

謝謝!

回答

1

的問題是在以下內容:

  • iOS不改變設備旋轉之後主窗框和根視圖幀(而Android那樣 - 我已經檢查)。
  • PlayN代碼預計旋轉後的視圖大小應該從768 * 1024(默認方向)更改爲1024 * 768。

實際結果:PlayN使用變換矩陣變換遊戲場景,但不會改變的OpenGL幀緩衝區的大小(幀緩衝區的大小仍然是768 * 1024)

我已通過添加下一段代碼解決了這個問題到IOSGLContext

@Override 
public void setSize (int width, int height) 
{ 
    if (UIDeviceOrientation.LandscapeLeft == orient || UIDeviceOrientation.LandscapeRight == orient) 
    { 
     Console.WriteLine("Swap IOSGLContext width and height for " + UIDeviceOrientation.wrap(orient)); 
     viewWidth = height; 
     viewHeight = width; 
    } 
    else 
    { 
     viewWidth = width; 
     viewHeight = height; 
    } 
    super.setSize(viewWidth, viewHeight); 
} 

現在一切都按預期工作!

如果您有任何其他的想法如何解決這個問題,我會很樂意討論它們)

謝謝!