More Related Content
PDF
Cocos2dx step2 アプリケーション基本Chu Chu
DOCX
Cocos2dx Eclipseで環境セットアップChu Chu
PDF
Cocos2dx step1 開発環境のセットアップChu Chu
Recently uploaded (9)
PPTX
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptxssuserfcafd1
Featured (20)
PDF
Storytelling For The Web: Integrate Storytelling in your Design ProcessChiara Aliotta
PDF
How to Leverage AI to Boost Employee Wellness - Lydia Di Francesco - SocialHR...SocialHRCamp
PDF
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
PDF
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
PDF
Content Methodology: A Best Practices Report (Webinar)contently
PPTX
How to Prepare For a Successful Job Search for 2024Albert Qian
PDF
5 Public speaking tips from TED - Visualized summarySpeakerHub
PDF
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
PDF
Getting into the tech field. what next Tessa Mero
PDF
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
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);
これらはグローバルのスコープではありません。クラスのメンバーとして変数を宣言している
だけです。