0

cocos2d ゲーム プロジェクトで Game Kit を実装しています。

ゲームは横向きのみです。ゲームキットもそうあるべきです。

マッチメイキング用のゲームキット モーダル ビューコントローラーを提示すると、横向きに表示されます。ただし、下層の cocos2d CCLayer は縦長になります。

rootViewContollers オリエンテーション コードは次のようになります。

// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

//
// There are 2 ways to support auto-rotation:
//  - The OpenGL / cocos2d way
//   - Faster, but doesn't rotate the UIKit objects
//  - The ViewController way
//  - A bit slower, but the UiKit objects are placed in the right place
//

#if GAME_AUTOROTATION==kGameAutorotationNone
//
// EAGLView won't be autorotated.
// Since this method should return YES in at least 1 orientation,
// we return YES only in the Portrait orientation
//
return ( interfaceOrientation == UIInterfaceOrientationPortrait );

#elif GAME_AUTOROTATION==kGameAutorotationCCDirector
//
// EAGLView will be rotated by cocos2d
//
// Sample: Autorotate only in landscape mode
//
if( interfaceOrientation == UIInterfaceOrientationLandscapeLeft ) {
    [[CCDirector sharedDirector] setDeviceOrientation: kCCDeviceOrientationLandscapeRight];
} else if( interfaceOrientation == UIInterfaceOrientationLandscapeRight) {
    [[CCDirector sharedDirector] setDeviceOrientation: kCCDeviceOrientationLandscapeLeft];
}

// Since this method should return YES in at least 1 orientation,
// we return YES only in the Portrait orientation
return ( UIInterfaceOrientationIsLandscape(interfaceOrientation) );

#elif GAME_AUTOROTATION == kGameAutorotationUIViewController
//
// EAGLView will be rotated by the UIViewController
//
// Sample: Autorotate only in landscpe mode
//
// return YES for the supported orientations

return ( UIInterfaceOrientationIsLandscape( interfaceOrientation ) );

#else
#error Unknown value in GAME_AUTOROTATION

#endif // GAME_AUTOROTATION


// Shold not happen
return NO;
}

GAME_AUTOROTATION を kGameAutorotationUIViewController または kGameAutorotationCCDirector または kGameAutorotationNone に定義しても違いはありません

4

1 に答える 1

0

だから私は修正を見つけたと信じています。

私の AppDelegate では、次の変更を行いました。

//[window addSubview: viewController.view];
[window setRootViewController:viewController];

その後、向きは iOS6 で完全に機能しましたが、iOS6 より前のバージョンの iOS では、ウィンドウ サイズの幅と高さが逆になり、ゲームに問題が発生しました。通常のシーンを実行する前に空白のシーンを追加することで解決しました。これは、新しいシーンをプッシュするときに逆サイズが自動的に修正されたためです。空白のシーンから [[CCDirector sharedDirector] replaceWithScene:[ゲームシーン]]; を実行しました。遅れて、それは今動作します。

于 2012-09-25T11:23:38.220 に答える