質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
COCOS2D-X

COCOS2D-Xは、 2Dゲームを手軽に開発できるフレームワークのことです。 iPhone(iOS)向け、Android等に対応しており、 実質ワンソースで開発が可能です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

525閲覧

cocos2dxで変数の処理を外部で行いたい

wai_wai

総合スコア5

COCOS2D-X

COCOS2D-Xは、 2Dゲームを手軽に開発できるフレームワークのことです。 iPhone(iOS)向け、Android等に対応しており、 実質ワンソースで開発が可能です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/10/17 05:01

cocos2dxで開発をしています。
変数を外部で処理したいと思い、次のコードを書きましたが、思うような結果が出てきません。

前提・実現したいこと

押したボタンに反応して以下の結果を得る
イメージ説明

d_Cnt_Inside : 11 str_Enter_Inside : 12121221221

touchEvent内だとの望む結果は得られています。

発生している問題

これをdoOutsideで処理すると

d_Cnt_Outside : 1 str_Enter_Outside : 1

となってしまいます。どうも毎回リセットされてしまうようです。

変数の参照の使い方だと思いますが、どうも理解できないため、解決方法を教えていただけると有り難いです。
よろしくお願いいたします。

該当のソースコード

c++

1 2// Test.hpp 3class Test : public cocos2d::Layer 4{ 5public: 6 static cocos2d::Scene* createScene(); 7 virtual bool init() ; 8 9 string str_Enter_Inside; 10 int d_Cnt_Inside; 11 12 string str_Enter_Outside; 13 int d_Cnt_Outside; 14 15 void touchEvent(Ref *pSender, cocos2d::ui::Widget::TouchEventType type); 16 void doOutside(string s_enter,int _cnt,int tag); 17 18 CREATE_FUNC(Test); 19};

c++

1// Test.cpp 2bool Test::init(){ 3 if(!Layer::init()) { return false; } 4 Vec2 origin = Director::getInstance()->getVisibleOrigin(); 5 for (int i=1; i<=2; i++) { 6 auto Btn=Button::create("_frame5.png","_frame5.png"); 7 Btn->setPosition(Vec2(origin.x +50*i,100)); 8 Btn->setTag(i); 9 Btn->setTitleText(format("%d",i)); 10 Btn->addTouchEventListener(CC_CALLBACK_2(Test::touchEvent, this)); 11 this->addChild(Btn); 12 } 13 return true; 14} 15 16void Test::touchEvent(Ref *pSender, Widget::TouchEventType type){ 17 Label* sprite = (Label*)pSender; 18 int tag = sprite->getTag(); 19 if (type== ui::Widget::TouchEventType::BEGAN) { 20 //この中で計算すると望む結果が出る 21 str_Enter_Inside = str_Enter_Inside+format("%d",tag); 22 d_Cnt_Inside++; 23 CCLOG("d_Cnt_Inside : %i",d_Cnt_Inside); 24 CCLOG("str_Enter_Inside : %s",str_Enter_Inside.c_str()); 25 26 //外で処理しようとすると 27 doOutside(str_Enter_Outside,d_Cnt_Outside,tag); 28 } 29} 30 31void Test::doOutside(string s_enter,int _cnt,int tag){//外での処理 32 // 本当はここで望む結果を得たい 33 s_enter = s_enter+format("%d",tag); 34 _cnt++; 35 CCLOG("d_Cnt_Outside : %i",_cnt); 36 CCLOG("str_Enter_Outside : %s",s_enter.c_str()); 37} 38

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは、まず、これはcocos2d-xの問題ではないですね。

原因は、doOutside()の引数が値渡しになっていることです。これを参照渡しにすればよいでしょう。

[参照渡し]
Test::doOutside(string& s_enter, int& _cnt, int tag)

もしくは、
[ポインタ渡し]
Test::doOutside(string* s_enter, int* _cnt, int tag)

投稿2021/10/21 14:32

roasan

総合スコア35

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wai_wai

2021/10/22 01:24

ご指摘どおり、参照渡しにして解決しました! ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問