2015年

2月

23日

Cocos2d-x Ver 3.x Topページ -> TableView -> 画像表示編


Topページ -> TableView -> 画像表示

前回の「TableView 画面遷移と画像表示」にTopページを付加しアプリらしい展開していく方法を示します。


Cocos2dx 3.x C++言語
AppDelegate.cppを次のように変更してみてください。

#include "AppDelegate.h"

#include "MenuTopScene.h" <- Topページクラス名に変更


USING_NS_CC;


    // create a scene. it's an autorelease object

    auto scene = MenuTopScene::createScene(); <- Topページクラス名に変更






Topページを記述していきます。
MenuTopScene.hを次のように変更してみてください。
このアプリが起動した時にBGMを再生する仕組みを追加しています。

#ifndef __TableView03__MenuTopScene__

#define __TableView03__MenuTopScene__


#include "cocos2d.h"


class MenuTopScene : public cocos2d::Layer

{

protected:

    MenuTopScene();

    virtual ~MenuTopScene();

    //初期化のメソッド

    bool init() override;

    

public:

    static cocos2d::Scene* createScene();

    // BGMの再生

    void onEnterTransitionDidFinish() override;

    // create()を使えるようにしている。

    CREATE_FUNC(MenuTopScene);

    

    // バッククリックキー

    void onKeyReleased(cocos2d::EventKeyboard::KeyCode keyCode, cocos2d::Event *event);

    

};


#endif /* defined(__TableView03__MenuTopScene__) */


MenuTopScene.cppを次のように変更してみてください。

#include "MenuTopScene.h"

#include "TopTableView.h"

//音をならすためにinclude

#include "SimpleAudioEngine.h"


// 名前空間 #define USING_NS_CC using namespace cocos2d

USING_NS_CC;


using namespace std; // String*


Scene* MenuTopScene::createScene()

{

    // 「シーン」は自動解放オブジェクトです

    auto scene = Scene::create();

    

    // 「レイアウト」は自動解放オブジェクトです

    auto layer = MenuTopScene::create();

    

    // シーンに子としてレイヤーを追加

    scene->addChild(layer);

    

    // シーンを返す

    return scene;

}


MenuTopScene::MenuTopScene()

{

    

}


MenuTopScene::~MenuTopScene()

{

    

}


// INIT」初期化

bool MenuTopScene::init()

{

    if ( !Layer::init() )

    {

        

        return false;

    }

    

    //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

    // バックキー処理

    auto keyboardListener = cocos2d::EventListenerKeyboard::create();

    keyboardListener->onKeyReleased = CC_CALLBACK_2(MenuTopScene::onKeyReleased, this);

    _eventDispatcher->addEventListenerWithSceneGraphPriority(keyboardListener, this);

    

    //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

    

    auto director = Director::getInstance();

    auto winSize = director->getWinSize();

    

    // 背景の追加

    auto background = Sprite::create("fire1-1@2x.png");

    background->setPosition(Vec2(winSize.width / 2.0, winSize.height / 2.0));

    this->addChild(background);

    

    // ミーラーレス一眼&ラベルを生成

    auto label1 = Label::createWithSystemFont("ミーラーレス一眼&", "Arial", 30);

    label1->setColor(Color3B::GREEN);

    // ラベルの設置

    label1->setPosition(Vec2(winSize.width / 2 - 170, winSize.height - 50));

    // ラベルタイトルを呼び込み追加

    this->addChild(label1,1);

    

    // デジタル一眼レフラベルを生成

    auto label2 = Label::createWithSystemFont("デジタル一眼レフ", "Arial", 30);

    label2->setColor(Color3B::GREEN);

    // ラベルの設置

    label2->setPosition(Vec2(winSize.width / 2 - 180, winSize.height - 85));

    // ラベルタイトルを呼び込み追加

    this->addChild(label2,1);

    

    // iSceneラベルを生成

    auto label3 = Label::createWithSystemFont("iScene", "Didot", 50);

    label3->setColor(Color3B::GREEN);

    // ラベルの設置

    label3->setPosition(Vec2(winSize.width / 2 + 110, winSize.height - 730));

    // ラベルタイトルを呼び込み追加

    this->addChild(label3,1);

    

    // notepadラベルを生成

    auto label4 = Label::createWithSystemFont("notepad", "Didot", 55);

    label4->setColor(Color3B::WHITE);

    // ラベルの設置

    label4->setPosition(Vec2(winSize.width / 2 + 190, winSize.height - 835));

    // ラベルタイトルを呼び込み追加

    this->addChild(label4,2);

    

    // 2015ラベルを生成

    auto label5 = Label::createWithSystemFont("2015", "Arial", 30);

    label5->setColor(Color3B::GREEN);

    // ラベルの設置

    label5->setPosition(Vec2(winSize.width / 2 + 200, winSize.height - 890));

    // ラベルタイトルを呼び込み追加

    this->addChild(label5,2);

    

    // フイルム画像の追加

    auto logo = Sprite::create("Film@2x.png");

    logo->setPosition(Vec2(winSize.width / 2.0 + 140, winSize.height - 790));

    logo->setScaleX(0.8); // 0.8倍縮小

    logo->setScaleY(0.8); // 0.8倍縮小

    this->addChild(logo);

    

    // 花火撮影ラベル Touch to Sutartの追加

    auto touchToStart = Label::createWithSystemFont("花火撮影", "Arial", 60);

    touchToStart->setPosition(Vec2(winSize.width / 2.0 + 160, 350));

    

    // 点滅させるアクションの定義

    auto blink = Sequence::create(FadeTo::create(0.5, 127),

                                  FadeTo::create(0.5, 225),

                                  NULL);

    

    // RepeatForever blink:無限に点滅

    touchToStart->runAction(RepeatForever::create(blink));

    this->addChild(touchToStart);

    

    // 画面をタッチしたときにテーブル画面へ遷移

    auto listener = EventListenerTouchOneByOne::create();

    listener->onTouchBegan = [this](Touch* touch, Event* event){

        // 効果音

        CocosDenshion::SimpleAudioEngine::getInstance()->playEffect("onepoint26.mp3");

        // 何度も押せないように一度押したらアクションを無効化する

        this->getEventDispatcher()->removeAllEventListeners();

        // 0.5秒待ってからCallFuncを呼ぶ

        auto delay = DelayTime::create(0.5);

        // テーブル画面に遷移を始めるアクション

        auto starGame = CallFunc::create([]{

            // テーブル画面

            auto scene = TopTableView::createScene();

            // シーンを移動する

            auto transition = TransitionProgressInOut::create(1.5, scene);

            // (replaceScene)直前のsceneはもう使わないから捨ててしまう方法

            Director::getInstance()->replaceScene(transition);

            

            //下からシーンが移動。

            //Director::getInstance()->replaceScene(TransitionMoveInB::create(1.0f,TopTableView::createScene()));

        });

        this->runAction(Sequence::create(delay, starGame, NULL));

        

        return true;

    };

    

    this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);

    

    return true;

}


// BGMの再生

void MenuTopScene::onEnterTransitionDidFinish()

{

    // BGMの再生

    CocosDenshion::SimpleAudioEngine::getInstance()->playBackgroundMusic("o12.mp3", true);

}


// バックキー処理 onKeyReleased()でバックキーのイベントを取得

void MenuTopScene::onKeyReleased(cocos2d::EventKeyboard::KeyCode keyCode, cocos2d::Event * event)

{

    if (keyCode == EventKeyboard::KeyCode::KEY_ESCAPE)

    {

        Director::getInstance()->end(); // アプリを終了させる

    }

}


/*

 (runWithScene) プログラム起動後、最初のsceneを起動する処理。

 (replaceScene) 直前のsceneはもう使わないから捨ててしまう方法。基本はこれになります。

 (pushScene)    直前のsceneに戻る予定があるので、メモリに取っておく方法です。

 (popScene)     pushしたsceneを消して、元のsceneに戻る処理。


 pushpopは、ゲーム中にオプション画面を開いてまた戻ってくる時などに使用します。


 cocos2dその7。シーン遷移 pushScenerunWithScene

 http://ameblo.jp/hash-r-1234/entry-10967942550.html

 

 */



補足

 (runWithScene) プログラム起動後、最初のsceneを起動する処理。

 (replaceScene) 直前のsceneはもう使わないから捨ててしまう方法。基本はこれになります。

 (pushScene)    直前のsceneに戻る予定があるので、メモリに取っておく方法です。

 (popScene)     pushしたsceneを消して、元のsceneに戻る処理。


 pushpopは、ゲーム中にオプション画面を開いてまた戻ってくる時などに使用します。






テーブルページを記述していきます。

TopTableView.hを次のように変更してみてください。

#ifndef __TableView02__TopTableView__

#define __TableView02__TopTableView__


#include <iostream>

#include "cocos2d.h"

#include <extensions/cocos-ext.h>


USING_NS_CC;

using namespace extension;


class TopTableView : public Layer,

public TableViewDataSource,

public TableViewDelegate

{

    Size window_size;

public:

    static cocos2d::Scene* createScene();

    virtual bool init();

    

    //TableViewDataSourceの抽象メソッド

    virtual Size cellSizeForTable(TableView* table);

    virtual TableViewCell* tableCellAtIndex(TableView* table,ssize_t idx);

    virtual ssize_t numberOfCellsInTableView(TableView* table);

    

    //TableViewDelegateの抽象メソッド

    virtual void tableCellTouched(TableView* table,TableViewCell* cell);

    

    //TableViewDelegateが継承しているScrollViewの抽象メソッド

    virtual void scrollViewDidScroll(ScrollView* view){};

    virtual void scrollViewDidZoom(ScrollView* view){};

    

    // 戻るボタン押下時の処理宣言 戻る Object → Ref に変更

    void pushBack(cocos2d::Ref *pSender);

    

    // バッククリックキー

    void onKeyReleased(cocos2d::EventKeyboard::KeyCode keyCode, cocos2d::Event *event);


    CREATE_FUNC(TopTableView);

    

};


#endif /* defined(__TableView02__TopTableView__) */


TopTableView.cppを次のように変更してみてください。

#include "TopTableView.h"

#include "MenuTopScene.h"

#include "SecondScene.h"

//音をならすためにinclude

#include "SimpleAudioEngine.h"


/// 行数格納用のキー

const char* ROW_KEY = "row";


Scene* TopTableView::createScene()

{

    auto scene = Scene::create();

    auto layer = TopTableView::create();

    // scenelayerを読み込み表示する

    scene->addChild(layer);

    

    return scene;

}


// on "init" you need to initialize your instance

bool TopTableView::init()

{

    // 初期化

    if ( !Layer::init() ) return false;

    

    //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

    // バックキー処理

    auto keyboardListener = cocos2d::EventListenerKeyboard::create();

    keyboardListener->onKeyReleased = CC_CALLBACK_2(TopTableView::onKeyReleased, this);

    _eventDispatcher->addEventListenerWithSceneGraphPriority(keyboardListener, this);

    

    //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

    

    // 画面サイズサイズを取得

    window_size = Director::getInstance()->getWinSize();

    

    // バックグランドカラー

    auto background = LayerColor::create(Color4B::BLACK,

                                         window_size.width,

                                         window_size.height);

    

    // バックグランドカラー 第2引数は表示順

    this->addChild(background, 0);

    

    // テーブル一覧ラベルを生成

    auto label1 = Label::createWithSystemFont("花火一覧", "Arial", 60);

    

    label1->setColor(Color3B::GREEN);

    

    // ラベルの設置

    label1->setPosition(Vec2(window_size.width / 2 ,window_size.height - 70));

    

    // ラベルタイトルを呼び込み追加

    this->addChild(label1,1);

    

    

    // テーブルのヘッダー空間

    TableView* tableView = TableView::create(this,Size(window_size.width,window_size.height*9/10));

    // テーブル全体表示

    //TableView* tableView = TableView::create(this, window_size);

    

    // 展開方向

    tableView->setDirection(TableView::Direction::VERTICAL);

    // 表示順序上からしたへ

    tableView->setVerticalFillOrder(TableView::VerticalFillOrder::TOP_DOWN);

    

    // 追加

    tableView->setDelegate(this);

    addChild(tableView);

    // tableViewに呼び込む

    tableView->reloadData();

    

    //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

    //戻るボタンを設置

    auto backButton = MenuItemImage::create(

                                            "Back.png"//表示

                                            "BackSelected.png"//タップ時の画像

                                            CC_CALLBACK_1(TopTableView::pushBack, this));

    

    backButton->setPosition(Point(window_size.width /2 - 260 ,window_size.height/2 + 500));

    

    //create menu, it's an autorelease object

    auto menu = Menu::create(backButton, NULL);

    

    menu->setPosition(Point::ZERO);

    

    this->addChild(menu, 1);

    //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

    

    return true;

}


// セルの大きさを設定する

Size TopTableView::cellSizeForTable(TableView *table){

    

    return Size(window_size.width, 215);

}


// 1セルに表示させるValueをセット

TableViewCell* TopTableView::tableCellAtIndex(TableView *table, ssize_t idx){

    

    // 行番号

    std::string id = StringUtils::format("%zd", idx);

    

    // セル

    TableViewCell *cell = table->dequeueCell();

    

    cell = new TableViewCell();

    // autoreleaseを呼び出す

    cell->autorelease();

    

    // セルの背景色

    auto background_color = Color3B::GRAY;

    

    // Background

    Sprite* bg = Sprite::create();

    bg->setAnchorPoint(Point(0, 0));

    bg->setTextureRect(Rect(0, 0, window_size.width, 215));

    bg->setColor(background_color);

    bg->setTag(100);

    // Backgroundを呼び出し表示

    cell->addChild(bg);

    

    // ボーダーライン

    Sprite* line = Sprite::create();

    line->setAnchorPoint(Point(0, 0));

    line->setTextureRect(Rect(0, 0, window_size.width, 1));

    line->setColor(Color3B::WHITE);

    cell->addChild(line);

    

    //////////////////////////////////////////////

    

    // Plist ValueVector

    ValueVector vec = FileUtils::getInstance()->getValueVectorFromFile("data.plist");

    

    // 置き換えセル行数変数 

    long idx0 = 0;

    // Cellidxidx01に保存

    log("idx:%ld", idx);

    

    // 最初のCell0行目

    if (idx == 0) {

        idx0 = idx;     // 最初のCell1行目

    } else {

        idx0 = idx * 4; // 次のCell2行目 Plist行数 x 4

    }

    

    // Plist 1行目は、idx0

    long idx1 = idx0 + 1; // Plist 2行目

    long idx2 = idx1 + 1; // Plist 3行目 花火小画像

    long idx3 = idx2 + 1; // Plist 4行目 花火大画像

    

    // 花火の種類ラベル表示

    std::string vec_1 = vec.at(idx1).asString();

    auto *label_2 = LabelTTF::create(vec_1.c_str(), "Arial", 52);

    label_2->setAnchorPoint(Point(0, 0));

    label_2->setPosition(Point(140, 70)); // セル幅のセンター

    label_2->setColor(Color3B::GREEN);

    cell->addChild(label_2);

    

    // 花火小画像

    std::string vec_3 = vec.at(idx3).asString();

    Sprite* imge_1 = Sprite::create(vec_3);

    imge_1->setAnchorPoint(Point(0, 0));

    imge_1->setPosition(Point(10, 0));

    imge_1->setScaleX(1.5); // 1.5倍拡大

    imge_1->setScaleY(1.5); // 1.5倍拡大

    cell->addChild(imge_1);

    

    return cell;

}


// セル数

ssize_t TopTableView::numberOfCellsInTableView(TableView *table){

    return 19;

}


// セルがタッチされた時のcallback

void TopTableView::tableCellTouched(TableView* table, TableViewCell* cell){

    

    log("%ziのセルがタッチされました", cell->getIdx());

    // cell 行番号

    float row = cell->getIdx();

    

    ////////////////////////////////////////////////

    // UserDefault 保存

    // 行番号保存

    UserDefault::getInstance()->setIntegerForKey(ROW_KEY, row);

    

    ////////////////////////////////////////////////

    

    // 効果音を鳴らす

    CocosDenshion::SimpleAudioEngine::getInstance()->playEffect("onepoint26.mp3");

    

    

    // 遷移先の画面のインスタンス

    Scene *pScene = SecondScene::createScene();

    

    // 0.5秒かけてフェードアウトしながら次の画面に遷移します

    //    引数1:フィードの時間

    //    引数2:移動先のシーン

    //    引数3:フィードの色(オプション)

    TransitionFade* transition = TransitionFade::create(0.5f, pScene);

    

    // 遷移実行  遷移時のアニメーション http://study-cocos2d-x.info/scenelayer/55/

    // 直前のsceneはもう使わないから捨ててしまう方法。基本はこれになります。

    Director::getInstance()->replaceScene(transition);

}


// pushBackボタン

void TopTableView::pushBack(Ref *pSender)

{

    // 効果音を鳴らす

    CocosDenshion::SimpleAudioEngine::getInstance()->playEffect("onepoint26.mp3");

    

    // 遷移先の画面のインスタンス

    Scene *pScene = MenuTopScene::createScene();

    

    // 0.5秒かけてフェードアウトしながら次の画面に遷移します

    //    引数1:フィードの時間

    //    引数2:移動先のシーン

    //    引数3:フィードの色(オプション)

    TransitionFade* transition = TransitionFade::create(0.5f, pScene);

    

    //遷移実行  遷移時のアニメーション http://study-cocos2d-x.info/scenelayer/55/

    // (replaceScene)直前のsceneはもう使わないから捨ててしまう方法

    Director::getInstance()->replaceScene(transition);

}


// バックキー処理 onKeyReleased()でバックキーのイベントを取得

void TopTableView::onKeyReleased(cocos2d::EventKeyboard::KeyCode keyCode, cocos2d::Event * event)

{

    if (keyCode == EventKeyboard::KeyCode::KEY_ESCAPE)

    {

        // 遷移先の画面のインスタンス

        Scene *pScene = MenuTopScene::createScene();

        

        // 0.5秒かけてフェードアウトしながら次の画面に遷移します

        //    引数1:フィードの時間

        //    引数2:移動先のシーン

        //    引数3:フィードの色(オプション)

        TransitionFade* transition = TransitionFade::create(0.5f, pScene);

        

        //遷移実行  遷移時のアニメーション http://study-cocos2d-x.info/scenelayer/55/

        // (replaceScene)直前のsceneはもう使わないから捨ててしまう方法

        Director::getInstance()->replaceScene(transition);

    }

}






SecondScene.hを次のように変更してみてください。

#ifndef __TableView02__SecondScene__

#define __TableView02__SecondScene__


#include "cocos2d.h"


class SecondScene : public cocos2d::Layer

{

public:

    

    //初期化のメソッド

    virtual bool init();

    

    static cocos2d::Scene* createScene();

    

    // 戻るボタン押下時の処理宣言 戻る Object → Ref に変更

    void pushBack(cocos2d::Ref *pSender);

    

    // row行数グローバル変数

    long idx0 = 0;

    

    // バッククリックキー

    void onKeyReleased(cocos2d::EventKeyboard::KeyCode keyCode, cocos2d::Event *event);


    // create()を使えるようにしている。

    CREATE_FUNC(SecondScene);

    

};


#endif /* defined(__TableView02__SecondScene__) */


SecondScene.cppを次のように変更してみてください。

#include "SecondScene.h"

#include "TopTableView.h"

//音をならすためにinclude

#include "SimpleAudioEngine.h"


// 名前空間 #define USING_NS_CC using namespace cocos2d

USING_NS_CC;


using namespace std; // String*


Scene* SecondScene::createScene()

{

    // 「シーン」は自動解放オブジェクトです

    auto scene = Scene::create();

    

    // 「レイアウト」は自動解放オブジェクトです

    auto layer = SecondScene::create();

    

    // シーンに子としてレイヤーを追加

    scene->addChild(layer);

    

    // シーンを返す

    return scene;

}


// INIT」初期化

bool SecondScene::init()

{

    if ( !Layer::init() )

    {

        return false;

    }

    

    //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

    // バックキー処理

    auto keyboardListener = cocos2d::EventListenerKeyboard::create();

    keyboardListener->onKeyReleased = CC_CALLBACK_2(SecondScene::onKeyReleased, this);

    _eventDispatcher->addEventListenerWithSceneGraphPriority(keyboardListener, this);

    

    //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

    

    //画面の座標関係の詳しい説明はここ http://www.cocos2d-x.org/wiki/Coordinate_System

    //画面サイズを取得

    Size winSize = Director::getInstance()->getVisibleSize();

    // 原点を取得

    Point origin = Director::getInstance()->getVisibleOrigin();

    

    // バックグランドカラー

    auto background = LayerColor::create(Color4B::BLUE,

                                         winSize.width,

                                         winSize.height);

    //バックグランドカラー追加 第2引数は表示順

    this->addChild(background, 0);

    

    

    // UserDefault 読込 LOG表示

    auto userRead = cocos2d::UserDefault::getInstance();

    log("row 行番号: %d", userRead->getIntegerForKey("row"));

    

    // int UserDefaultrowを呼び込む

    auto row = userRead->getIntegerForKey("row");

    

    //////////////////////////////////////////////

    

    // Plist ValueVector

    ValueVector vec = FileUtils::getInstance()->getValueVectorFromFile("data.plist");

    

    // 最初の0行目を選択した時

    if (row == 0) {

        idx0 = row;     // 最初のCell1行目

    } else {

        idx0 = row * 4; // 次のCell2行目 Plist行数 x 4

    }


    // Plist 1行目は、idx0 = row 連番

    long idx1 = idx0 + 1; // Plist 2行目 花火の種類

    long idx2 = idx1 + 1; // Plist 3行目 花火の写真

    long idx3 = idx2 + 1; // Plist 4行目 花火の小写真

    

    //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

    

    // Plist 花火の写真画像CCSpriteクラスを初期化しています。

    std::string vec_3 = vec.at(idx2).asString();

    auto sprite1 = Sprite::create(vec_3);

    //位置を設定

    sprite1->setPosition(Vec2(winSize.width/2, winSize.height/2));

    //画面に追加をしています。

    this->addChild(sprite1);

    

    //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

    

    // Plist 花火の種類タイトルを設置

    std::string vec_1 = vec.at(idx1).asString();

    auto lbl_title = Label::createWithSystemFont(vec_1, "Arial", 40);

    lbl_title->setPosition(Point(origin.x + winSize.width/2,

                                 origin.y + winSize.height - 19

                                 -lbl_title->getContentSize().height));

    lbl_title->setColor(Color3B::GREEN);

    this->addChild(lbl_title,1);

    

    //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

    //戻るボタンを設置

    auto backButton = MenuItemImage::create(

                                            "Back.png"//表示

                                            "BackSelected.png"//タップ時の画像

                                            CC_CALLBACK_1(SecondScene::pushBack, this));

    

    backButton->setPosition(Point(winSize.width /2 - 260 ,winSize.height/2 + 510));

    

    //create menu, it's an autorelease object

    auto menu = Menu::create(backButton, NULL);

    

    menu->setPosition(Point::ZERO);

    

    this->addChild(menu, 1);

    //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

    

    return true;

}


// pushBackボタン

void SecondScene::pushBack(Ref *pSender)

{

    // 効果音を鳴らす

    CocosDenshion::SimpleAudioEngine::getInstance()->playEffect("onepoint26.mp3");

    

    // 遷移先の画面のインスタンス

    Scene *pScene = TopTableView::createScene();

    

    // 0.5秒かけてフェードアウトしながら次の画面に遷移します

    //    引数1:フィードの時間

    //    引数2:移動先のシーン

    //    引数3:フィードの色(オプション)

    TransitionFade* transition = TransitionFade::create(0.5f, pScene);

    

    //遷移実行  遷移時のアニメーション http://study-cocos2d-x.info/scenelayer/55/

    Director::getInstance()->replaceScene(transition);

}


// バックキー処理 onKeyReleased()でバックキーのイベントを取得

void SecondScene::onKeyReleased(cocos2d::EventKeyboard::KeyCode keyCode, cocos2d::Event * event)

{

    if (keyCode == EventKeyboard::KeyCode::KEY_ESCAPE)

    {

        // 遷移先の画面のインスタンス

        Scene *pScene = TopTableView::createScene();

        

        // 0.5秒かけてフェードアウトしながら次の画面に遷移します

        //    引数1:フィードの時間

        //    引数2:移動先のシーン

        //    引数3:フィードの色(オプション)

        TransitionFade* transition = TransitionFade::create(0.5f, pScene);

        

        //遷移実行  遷移時のアニメーション http://study-cocos2d-x.info/scenelayer/55/

        // (replaceScene)直前のsceneはもう使わないから捨ててしまう方法

        Director::getInstance()->replaceScene(transition);

    }

}

 

GitHub TableView03


Androidのビルドに必要なAndroid.mkの編集

クラスを追加した場合には、Android.mkファイルの修正が必要です。

HelloWorld.cppの書き換えと追加クラス名を追加します。

これをしておかないと表示が変わらず真黒な画面が表示されますので注意してください。

 

Android.mkディレクトリーの場所

TableView03/proj.android/jni/Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

$(call import-add-path,$(LOCAL_PATH)/../../cocos2d)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/external)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/cocos)

LOCAL_MODULE := cocos2dcpp_shared

LOCAL_MODULE_FILENAME := libcocos2dcpp

LOCAL_SRC_FILES := hellocpp/main.cpp \
                   ../../Classes/AppDelegate.cpp \

                   ../../Classes/MenuTopScene.cpp \  <- ※HelloWorld.cppを書き換え 
                   ../../Classes/TopTableView.cpp \     <- ※追加 

                   ../../Classes/SecondScene.cpp      <- ※追加

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes

LOCAL_STATIC_LIBRARIES := cocos2dx_static

include $(BUILD_SHARED_LIBRARY)

$(call import-module,.)

 

目 次