C++11とCOCOS2D-X v3でゲームのプログラムを作ろうとしています。開発環境はMac OSX 10.9 / Xcode6.2です。キーボードからの入力を変数の状態に反映させるために、Testクラスのメンバ変数aを書き換えたいのですが、それ以前に読み込み?がかれこれ数ヶ月上手くできずに困っています。コードの大事そうなところは以下のとおりです。
###MainScene.h
'''C++
#include "cocos2d.h"
typedef cocos2d::Vector<Field *> FieldVector; // define FieldVector
class MainScene :public cocos2d::Layer {
protected:
MainScene();
virtual ~MainScene();
bool init() override;
public:
static cocos2d::Scene* createScene(); // シーン生成
void update(float dt) override;
CREATE_FUNC(MainScene);
private:
};
'''
###MainScene.cpp
'''C++
#include "MainScene.h"
#include "Test.h"
#include <iostream>
USING_NS_CC;
MainScene::MainScene()
{
}
MainScene::~MainScene() {
}
Scene* MainScene::createScene() {
auto scene = Scene::create(); // create scene
auto layer = MainScene::create();
scene->addChild(layer);
return scene;
}
bool MainScene::init() {
if (!Layer::init()) {
return false;
}
Test test;
auto listener = EventListenerKeyboard::create(); // イベントリスナーの生成
listener->onKeyPressed = [this, &test](EventKeyboard::KeyCode keyCode, Event* keyEvent) {
if (keyCode == EventKeyboard::KeyCode::KEY_W) {
std::cout << test.getA() << std::endl; // Testクラスでa=1と初期化したはずなのに変な値が表示される
}
};
this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this); // イベントディスパッチャー
this->scheduleUpdate();
return true;
}
void MainScene::update(float dt) {
// 毎フレーム実行される
}
'''
###Test.h
'''
#include "cocos2d.h"
class Test {
protected:
private:
int a;
public:
Test() {
a = 1;
};
virtual ~Test() {
};
void setA(int x) {
a = x;
}
int getA() {
return a;
}
};
'''
MainScene.cpp内のイベントリスナーのあたりのラムダ式のところで、'Test test'を参照キャプチャすれば良いのかと思っていたのですが、実行してみると(ビルドは通りました)394793527などのような変な値がアウトプットされます。
プログラムの方針としては、別クラスのメンバ変数であるグリッド座標で保持しているデータ(プレイヤーの位置等)をキーボード入力などのイベントによって変更したいのですが、このポイントで躓いて他にどのような方法があるかも分からず、困っています。アドバイスいただけると幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/01/20 00:48
2016/01/22 12:02
2016/01/22 16:13