

Cocos2d-x 3.2で、Objective-
CのUIViewを使用する機会があったのですが、UIViewの位置がすべてSpriteより手前になってしまいます。  
UIViewだけでなく、Objective-Cから呼ばれるすべてのビューはCocos2d-xのビューより階層構造上、手前に配置されてしまいます。  
addChildメソッドを呼ぶときに、ZOrderの値を大きくしても、結果は同じでした。  
階層構造で、UIViewより上の位置にSpriteを配置することはできるのでしょうか？  
詳しい方、ご教示ください。

[code]

    // UIViewを配置
    UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 200, 200)];
    [view setBackgroundColor:[UIColor blueColor]];
    UIView *rootView = (UIView*)cocos2d::Director::getInstance()->getOpenGLView()->getEAGLView();
    [rootView addSubview:view];
    
    // Spriteを配置
    Sprite *sprite = Sprite::create("sprite.png");
    sprite->setPosition(Point(430,320));
    this->addChild(sprite,100,100);
    
[/code]

[![画像の説明をここに入力](https://i.stack.imgur.com/4O2UD.png)](https://i.stack.imgur.com/4O2UD.png)


CC BY-SA 3.0
2015-09-15T01:42:53.440
16613
2015-09-15T08:07:54.927
7699
question
ios objective-c cocos2d-x
Cocos2d-xの階層構造で、SpriteをUIViewより上にしたい。


cocos2d-xのスプライトはViewとして追加されているのではなくOpenGLを使って  
直接特定のView（あなたのコードで言うrootView）に描画されています。  
ですので、rootViewの上に付けたUIViewより上に表示することは出来ないのではないでしょうか。


CC BY-SA 3.0
2015-09-15T07:59:40.907
16627
2015-09-15T07:59:40.907
849
16613
answer


確実に優先を付けたいなら下図のような構成にして、普通のViewはunderViewにAddしましょう。

[code]

    +-[rootView]-------+
    |                  |
    |  +-[underView]-----+
    |  |                 |
    |  |  +-[EAGLView]-----+
    +--|  |                |
       |  |                |
       +--|                |
          |                |
          +----------------+
    
[/code]

ざっくりコード。

[code]

    CGRect frame = (画面一杯?);
    //Root view
    UIView *rootView = [[UIView alloc] initWithFrame:frame];
    rootView.backgroundColor = UIColor.clearColor;
    //Low prio view
    UIView *underView = [[UIView alloc] initWithFrame:frame];
    rootView.backgroundColor = UIColor.clearColor;
    //EAGLView
    UIView *EAGLView = (略);
    //Add subview
    [rootView addSubview:underView];
    [rootView addSubview:EAGLView];
    
    //青いの
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
    [view setBackgroundColor:[UIColor blueColor]];
    [underView addSubview:view];
    
[/code]

rootViewとunderViewの背景色は透明じゃなくて黒とかにした方がいいかも。（速度的に）

【追記】  
通常、rootViewは生成するんじゃなくて、ViewControllerのviewを使うんじゃないかな。  
今回、どういう構成になっているか分からないのでなんとも言えませんが。


CC BY-SA 3.0
2015-09-15T08:02:13.317
16628
2015-09-15T08:07:54.927
2015-09-15T08:07:54.927
10966
10966
16613
answer