SlideShare a Scribd company logo
メニューについて
I. メニューの概要
今回は Cocos2dx のボタンのを作成について紹介します。ボタンを作成する為に Cocos2dx は
メニューアイテムクラスを使う方法を提供します。メニューアイテムは主に三つの種類があり
ます。
MenuItemLabel はラベルをボタンにするものです。
MenuItemImage はイメージ(画像)をボタンにするものです。
MenuItemSprite はスプライトをボタンにするものです。
順番に紹介します。
II. メニューを作成方法
まずは MenuItem の種類を紹介する前に C++言語の auto キーワードを話します。
Visual C++ 2010 より前のバージョンでは、auto キーワードは、ローカルな寿命クラスの変
数、つまりローカルの有効期間を持つ変数を宣言します。 Visual C++ 2010 以降、 auto キ
ーワードは、その宣言の初期化式から変数の型を推測し、変数を宣言します。【ウィキの定義】
それで以下にメニューを作成するについて紹介します。
こちらは Visual C++の仕様によるものではなく、C++11 標準に基づく内容です。MSDN か
らの調査したのでしょうけど、Cocos2d-x v3 からはもとから C++11 が前提です。Auto キーワ
ードの昔の意味を知る必要はありません。
1. イ メージ(画像)からメニューを作成する
イメージからメニューを作成する為に Cocos2dx の 3.x バーションでは MenuItemImage クラ
スを利用します。イメージは「通常時の画像」と「押した時の画像」の二つ状態を利用しま
す。
//画面のサイズを取得する
Size winSize = Director::getInstance()->getWinSize();
//ボタン1を生成する
auto mItem1 = MenuItemImage::create(
"menu_image1.png" , // 1引数は通常時の画像
"menu_image1_normal, // 2 引数は押した時の画像
CC_CALLBACK_0(HelloWorld::menuAction, this));// 3 引数は Cocos2dx のコールバック関
数のマクロ
//ボタン 2 を生成する
auto mItem2 = MenuItemImage::create(
"menu_mage1.png", // 1引数は非常時の画像
"menu_mage1_over.png", // 2 引数は押した時の画像
//3 引数は自分でコールバック関数を設定する
[&](Ref* sender){
//ボタンのップイベントを呼び出す
// ロッグ
ccos2d::log(“タップされました“);
});
//メニューでメニューアイテム配置を設定する
mItem1->setPosition(Point(winSize.width/2-200,winSize.height/2));
mItem2->setPosition(Point(winSize.width/2+200,winSize.height/2));
//メニューを作成
auto _menu = Menu::create(mItem1,mItem2,NULL);
//メニュー配置を設定する
_menu->setPosition(Point::ZERO);
// Vec2::ZERO = Point::ZERO = Vec2(0,0) = Point(0,0)
this->addChild(_menu);
タップすると「ボタンが押されました」のメッセージが出るようにします。
void HelloWorld::menuAction(Ref* pSender)
{
log("タップされました。");
}
これは結果です。
結果に関して、メニュー1と2の違いなどを詳しく書いてください。書き方の違い(規定のマ
クロと C++の lambda function を使った)に関しての説明も不足しています。
2. テ キストからメニューを作成する
画像だけではなくテキストもボタンを作成できます。ラベルからメニューを作成する為に
Cocos2dx の 3.x バーションでは MenuItemLabel クラスを利用します。
//画面サイズを取得
Size s = Director::getInstance()->getVisibleSize();
//メニューアイテムラベルの作成
auto pLabel = LabelTTF::create("Button", "Arial", 50);
auto pBtnItem = MenuItemLabel::create(
pLabel,
CC_CALLBACK_1(HelloWorld::myCallback, this));
//メニューの作成 pMenu の中に pBtnItem を入れる
Menu* pMenu = Menu::create(pBtnItem, NULL);
//pMenu を画面中央に配置
pMenu->setPosition(Vec2(s.width*.5, s.height*.5));
this->addChild(pMenu);
タップすると「タンが押されました」のメッセージが出るようにします。
void HelloWorld::myCallback(Ref* pSender)
{
log("タップされました。");
}
これは結果です。
3. ス プライトからメニューを作成する
二つのスプライトを組み合わせてボタンを作成します。下の例では一つ目は半透明コード(タ
ップ前)、もう一つは不透明(タップ後)を使っています。
//画面サイズを取得
Size s = Director::getInstance()->getVisibleSize();
//タップ前のスプライト
auto pNormalSprite = Sprite::create("1.png");
pNormalSprite->setOpacity(100);
//タップ時のスプライト
auto pSelectedSprite = Sprite::create("1.png");
//メニューアイテムの作成
auto pBtnItem = MenuItemSprite::create(pNormalSprite, pSelectedSprite,
CC_CALLBACK_1(HelloWorld::myCallback, this));
//メニューの作成 pMenu の中に pBtnItem を入れる
auto pMenu = Menu::create(pBtnItem, NULL);
//pMenu を画面中央に配置
pMenu->setPosition(Vec2(s.width*.5, s.height*.5));
this->addChild(pMenu);
タップするとコールバック関数を呼び出します。
void HelloWorld::myCallback(Ref* pSender)
{
log("タップされました。");
}
形式の一貫性が欠けています:結果画面がありません。
注 意 :auto キーワードを使わない変数の場合はヘッダファイルでグローバルな変数として宣言
します。関数もヘッダに宣言します。
pivate:
// 変数の宣言
MenuItemImage* mItem1;
MenuItemImage* mItem2;
Menu* _menu;
// 関数の宣言
void HelloWorld::menuAction(Ref* pSender);
void HelloWorld::myCallback(Ref* pSender);
これらはグローバルのスコープではありません。クラスのメンバーとして変数を宣言している
だけです。

More Related Content

DOCX
Cocos2dx メニューについて
Chu Chu
 
PDF
Cocos2dx step2 アプリケーション基本
Chu Chu
 
PDF
Yidev cocos2dx
Akihiro Matsuura
 
PPTX
Cocos2d-x(JS) ハンズオン #03「複数あるボタンの使い分け」
Tomoaki Shimizu
 
PDF
Cocos2d-xを用いたゲームアプリ「めちゃギントン」開発の裏側
Akihiro Matsuura
 
DOCX
Jniについて
Chu Chu
 
DOCX
Cocos2dx Eclipseで環境セットアップ
Chu Chu
 
PDF
Cocos2dx step1 開発環境のセットアップ
Chu Chu
 
Cocos2dx メニューについて
Chu Chu
 
Cocos2dx step2 アプリケーション基本
Chu Chu
 
Yidev cocos2dx
Akihiro Matsuura
 
Cocos2d-x(JS) ハンズオン #03「複数あるボタンの使い分け」
Tomoaki Shimizu
 
Cocos2d-xを用いたゲームアプリ「めちゃギントン」開発の裏側
Akihiro Matsuura
 
Jniについて
Chu Chu
 
Cocos2dx Eclipseで環境セットアップ
Chu Chu
 
Cocos2dx step1 開発環境のセットアップ
Chu Chu
 

Recently uploaded (9)

PDF
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
PPTX
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
PDF
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
PDF
20250729_Devin-for-Enterprise
Masaki Yamakawa
 
PDF
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 
PDF
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 
PPTX
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
PDF
20250730_QiitaBash_LT登壇資料_PDC_Kurashina.pdf
pdckurashina
 
PDF
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
20250729_Devin-for-Enterprise
Masaki Yamakawa
 
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
20250730_QiitaBash_LT登壇資料_PDC_Kurashina.pdf
pdckurashina
 
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 
Ad
Ad

Cocos2dx step4 メニューについて

  • 1. メニューについて I. メニューの概要 今回は Cocos2dx のボタンのを作成について紹介します。ボタンを作成する為に Cocos2dx は メニューアイテムクラスを使う方法を提供します。メニューアイテムは主に三つの種類があり ます。 MenuItemLabel はラベルをボタンにするものです。 MenuItemImage はイメージ(画像)をボタンにするものです。 MenuItemSprite はスプライトをボタンにするものです。 順番に紹介します。 II. メニューを作成方法 まずは MenuItem の種類を紹介する前に C++言語の auto キーワードを話します。 Visual C++ 2010 より前のバージョンでは、auto キーワードは、ローカルな寿命クラスの変 数、つまりローカルの有効期間を持つ変数を宣言します。 Visual C++ 2010 以降、 auto キ ーワードは、その宣言の初期化式から変数の型を推測し、変数を宣言します。【ウィキの定義】 それで以下にメニューを作成するについて紹介します。 こちらは Visual C++の仕様によるものではなく、C++11 標準に基づく内容です。MSDN か らの調査したのでしょうけど、Cocos2d-x v3 からはもとから C++11 が前提です。Auto キーワ ードの昔の意味を知る必要はありません。 1. イ メージ(画像)からメニューを作成する イメージからメニューを作成する為に Cocos2dx の 3.x バーションでは MenuItemImage クラ スを利用します。イメージは「通常時の画像」と「押した時の画像」の二つ状態を利用しま す。 //画面のサイズを取得する Size winSize = Director::getInstance()->getWinSize(); //ボタン1を生成する auto mItem1 = MenuItemImage::create( "menu_image1.png" , // 1引数は通常時の画像 "menu_image1_normal, // 2 引数は押した時の画像 CC_CALLBACK_0(HelloWorld::menuAction, this));// 3 引数は Cocos2dx のコールバック関 数のマクロ //ボタン 2 を生成する auto mItem2 = MenuItemImage::create(
  • 2. "menu_mage1.png", // 1引数は非常時の画像 "menu_mage1_over.png", // 2 引数は押した時の画像 //3 引数は自分でコールバック関数を設定する [&](Ref* sender){ //ボタンのップイベントを呼び出す // ロッグ ccos2d::log(“タップされました“); }); //メニューでメニューアイテム配置を設定する mItem1->setPosition(Point(winSize.width/2-200,winSize.height/2)); mItem2->setPosition(Point(winSize.width/2+200,winSize.height/2)); //メニューを作成 auto _menu = Menu::create(mItem1,mItem2,NULL); //メニュー配置を設定する _menu->setPosition(Point::ZERO); // Vec2::ZERO = Point::ZERO = Vec2(0,0) = Point(0,0) this->addChild(_menu); タップすると「ボタンが押されました」のメッセージが出るようにします。 void HelloWorld::menuAction(Ref* pSender) { log("タップされました。"); } これは結果です。 結果に関して、メニュー1と2の違いなどを詳しく書いてください。書き方の違い(規定のマ クロと C++の lambda function を使った)に関しての説明も不足しています。
  • 3. 2. テ キストからメニューを作成する 画像だけではなくテキストもボタンを作成できます。ラベルからメニューを作成する為に Cocos2dx の 3.x バーションでは MenuItemLabel クラスを利用します。 //画面サイズを取得 Size s = Director::getInstance()->getVisibleSize(); //メニューアイテムラベルの作成 auto pLabel = LabelTTF::create("Button", "Arial", 50); auto pBtnItem = MenuItemLabel::create( pLabel, CC_CALLBACK_1(HelloWorld::myCallback, this)); //メニューの作成 pMenu の中に pBtnItem を入れる Menu* pMenu = Menu::create(pBtnItem, NULL); //pMenu を画面中央に配置 pMenu->setPosition(Vec2(s.width*.5, s.height*.5)); this->addChild(pMenu); タップすると「タンが押されました」のメッセージが出るようにします。 void HelloWorld::myCallback(Ref* pSender)
  • 4. { log("タップされました。"); } これは結果です。 3. ス プライトからメニューを作成する 二つのスプライトを組み合わせてボタンを作成します。下の例では一つ目は半透明コード(タ ップ前)、もう一つは不透明(タップ後)を使っています。 //画面サイズを取得 Size s = Director::getInstance()->getVisibleSize(); //タップ前のスプライト auto pNormalSprite = Sprite::create("1.png"); pNormalSprite->setOpacity(100); //タップ時のスプライト auto pSelectedSprite = Sprite::create("1.png"); //メニューアイテムの作成 auto pBtnItem = MenuItemSprite::create(pNormalSprite, pSelectedSprite, CC_CALLBACK_1(HelloWorld::myCallback, this)); //メニューの作成 pMenu の中に pBtnItem を入れる auto pMenu = Menu::create(pBtnItem, NULL); //pMenu を画面中央に配置 pMenu->setPosition(Vec2(s.width*.5, s.height*.5)); this->addChild(pMenu); タップするとコールバック関数を呼び出します。 void HelloWorld::myCallback(Ref* pSender) {
  • 5. log("タップされました。"); } 形式の一貫性が欠けています:結果画面がありません。 注 意 :auto キーワードを使わない変数の場合はヘッダファイルでグローバルな変数として宣言 します。関数もヘッダに宣言します。 pivate: // 変数の宣言 MenuItemImage* mItem1; MenuItemImage* mItem2; Menu* _menu; // 関数の宣言 void HelloWorld::menuAction(Ref* pSender); void HelloWorld::myCallback(Ref* pSender); これらはグローバルのスコープではありません。クラスのメンバーとして変数を宣言している だけです。