2017-09-11 4 views
1

ちょっとXCodeとiPhone 5cを使ってCocos2dxアプリケーションを開発しています。座標系をポートレートに変更しようとしています。 私はこれらの指示を見ましたhttp://www.cocos2d-x.org/wiki/Device_Orientation。方向によると、RootViewControllerのいくつかのメソッドを変更して、Cocosがその魔法を行う前に、iOSがすでにコンテナの回転を処理しているようにする必要があります。Cocos2dx v.3.0ポートレートモード

私のRootViewController.mmの適用可能なメソッドは次のようになります。それは構築し、実行します。私はiPhoneの最左部の点をタッチする

#ifdef __IPHONE_6_0 
- (NSUInteger) supportedInterfaceOrientations{ 
    return UIInterfaceOrientationMaskPortrait; 
} 
#endif 

- (BOOL) shouldAutorotate { 
    return YES; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return UIInterfaceOrientationIsPortrait (interfaceOrientation); 
} 

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { 
    [super didRotateFromInterfaceOrientation:fromInterfaceOrientation]; 

    auto glview = cocos2d::Director::getInstance()->getOpenGLView(); 

    if (glview) 
    { 
     CCEAGLView *eaglview = (__bridge CCEAGLView *)glview->getEAGLView(); 

     if (eaglview) 
     { 
      CGSize s = CGSizeMake([eaglview getWidth], [eaglview getHeight]); 
      cocos2d::Application::getInstance()->applicationScreenSizeChanged((int) s.width, (int) s.height); 
     } 
    } 
} 
@end 

私のレベルのinit()メソッドのコードは、この

bool Level1::init() 
{ 
    ////////////////////////////// 
    // 1. super init first 
    if (!Scene::init()) 
    { 
     return false; 
    } 

    auto visibleSize = Director::getInstance()->getVisibleSize(); 
    Vec2 origin = Director::getInstance()->getVisibleOrigin(); 

    for(int i= 0; i < MAX_TOUCHES; ++i) { 
     labelTouchLocations[i] = Label::createWithSystemFont("", "Arial", 42); 
     labelTouchLocations[i]->setVisible(false); 
     this->addChild(labelTouchLocations[i]); 
    } 

    auto eventListener = EventListenerTouchAllAtOnce::create(); 

    // Create an eventListener to handle multiple touches, using a lambda, cause baby, it's C++11 
    eventListener->onTouchesBegan = [=](const std::vector<Touch*>&touches, Event* event){ 

     // Clear all visible touches just in case there are less fingers touching than last time 
     std::for_each(labelTouchLocations,labelTouchLocations+MAX_TOUCHES,[](Label* touchLabel){ 
      touchLabel->setVisible(false); 
     }); 

     // For each touch in the touches vector, set a Label to display at it's location and make it visible 
     for(int i = 0; i < touches.size(); ++i){ 
      labelTouchLocations[i]->setPosition(touches[i]->getLocation()); 
      labelTouchLocations[i]->setVisible(true); 
      labelTouchLocations[i]->setString("Touched"); 
      std::cout << "(" << touches[i]->getLocation().x << "," << touches[i]->getLocation().y << ")" << std::endl; 

     } 
    }; 

    _eventDispatcher->addEventListenerWithSceneGraphPriority(eventListener, this); 

    return true; 
} 

のように見え、X接触点Iの座標プリントアウトは約150です。予想通り、y座標は0です。 x座標がゼロでないのはなぜですか?シーンの作成に欠けているものはありますか?私は、ココスの文書に必要なすべての変更を加えたと信じています。彼らのドキュメントは古くなっていますか?

答えて

1

ドキュメントの示唆しているように、座標系が左下に(0,0)から始まっていません。ただし、デフォルトのシーンに含まれるコンテナの起点とサイズを取得するために使用できる単純なメソッドがあります。

auto visibleSize = Director::getInstance()->getVisibleSize(); 
Vec2 origin = Director::getInstance()->getVisibleOrigin(); 
関連する問題