CocosSharpで画像ボタンの色を変えたい。

こんにちは、world_wide_anitoです。
本記事は、前回の続きというか本題になります。
blog.xamarinian.net

CocosSharpでは、CCSpriteのColorプロパティを設定することで、簡単に画像の色を変更できます。
ただし、画像ボタンの色を変更する場合は、ベースとなるCCSpriteではなく、CCMenuItemImageのColorプロパティを設定してやる必要があります。

以下のサンプルコードでは、spriteのColorプロパティとして緑を設定していますが、実行結果には反映されていません。

サンプルコード
        /// <summary>
        /// メニューを作成する
        /// </summary>
        /// <param name="layer"></param>
        private void CreateMenu(CCLayer layer)
        {
            // 色を変更したspriteからMenuItemを生成
            var sprite = new CCSprite("ic_check_white_24dp.png");
            sprite.Color = CCColor3B.Green;
            var menuItem = new CCMenuItemImage(sprite);

            // sprite2からmenuItem2を生成した後、menuItem2の色を変更
            var sprite2 = new CCSprite("ic_close_white_24dp.png");
            var menuItem2 = new CCMenuItemImage(sprite2);
            menuItem2.Color = CCColor3B.Red;

            // メニューを生成
            var menu = new CCMenu(menuItem, menuItem2);
            menu.AlignItemsHorizontally();  // ボタンを横に並べる

            // レイヤーにメニューを設定
            layer.AddChild(menu);
        }
実行結果

f:id:world_wide_anito:20180502205832p:plain:w320


複数のボタンを同じ色に変更する場合、CCMenuのColorプロパティを設定するのが便利です。
ただし、MenuItemのColorプロパティを個別設定している場合は、そちらが優先されます。
また、色が変更されるのはCCMenuのColorプロパティを設定した時点の子ノードのみです。

以下のサンプルコードでは、色の指定方法とタイミングによって3つのボタンがそれぞれ違う色で出力されます。

サンプルコード
        /// <summary>
        /// メニューを作成する
        /// </summary>
        /// <param name="layer"></param>
        private void CreateMenu(CCLayer layer)
        {
            var check = new CCMenuItemImage(new CCSprite("ic_check_white_24dp.png"));
            var refresh = new CCMenuItemImage(new CCSprite("ic_refresh_white_24dp.png"));
            var close = new CCMenuItemImage(new CCSprite("ic_close_white_24dp.png"));

            // 個別の色設定
            check.Color = CCColor3B.Green;

            // 空のメニューを生成
            var menu = new CCMenu();

            menu.AddChild(check);
            menu.AddChild(refresh);
            menu.Color = CCColor3B.Yellow;
            menu.AddChild(close);
            
            menu.AlignItemsHorizontally();  // ボタンを横に並べる

            // レイヤーにメニューを設定
            layer.AddChild(menu);
        }
実行結果

f:id:world_wide_anito:20180503082741p:plain:w320

動作環境
  • CocosSharp.Forms v1.7.1