狠狠撸

狠狠撸Share a Scribd company logo
メニューについて
I. メニューの概要
このテップは Cocos2dx でボタンを作成について紹介します。ボタンを作成する為に Cocos2dx
の既にメニューアイテムを使う方法を投稿します。メニューアイテムは主に三つの種類がありま
す。
MenuItemLabel はラベルをボタンにするものです。
MenuItemImage はイメージ(画像)をボタンにするものです。
MenuItemSprite はスプライトをボタンにするものです。
II. メニューを作成方法
まずは MenuItem の種類を紹介する前に C++言語の auto キーワードを話します。
Visual C++ 2010 より前のバージョンでは、auto キーワードは、ローカルな寿命クラスの変数、
つまりローカルの有効期間を持つ変数を宣言します。 Visual C++ 2010 以降、 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("タップされました。");
}
これは結果です。
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

Cocos2dx メニューについて

  • 1. メニューについて I. メニューの概要 このテップは Cocos2dx でボタンを作成について紹介します。ボタンを作成する為に Cocos2dx の既にメニューアイテムを使う方法を投稿します。メニューアイテムは主に三つの種類がありま す。 MenuItemLabel はラベルをボタンにするものです。 MenuItemImage はイメージ(画像)をボタンにするものです。 MenuItemSprite はスプライトをボタンにするものです。 II. メニューを作成方法 まずは MenuItem の種類を紹介する前に C++言語の auto キーワードを話します。 Visual C++ 2010 より前のバージョンでは、auto キーワードは、ローカルな寿命クラスの変数、 つまりローカルの有効期間を持つ変数を宣言します。 Visual C++ 2010 以降、 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){ //ボタンのップイベントを呼び出す
  • 2. // ロッグ 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("タップされました。"); } これは結果です。
  • 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) { log("タップされました。"); } これは結果です。
  • 4. 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;
  • 5. // 関数の宣言 void HelloWorld::menuAction(Ref* pSender); void HelloWorld::myCallback(Ref* pSender);