cocos2d-xでアニメーションStopについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kimura
記事: 4
登録日時: 10年前

cocos2d-xでアニメーションStopについて

#1

投稿記事 by kimura » 10年前

お世話になっています。
cocos2d-x ver.2.2.2でパラパラアニメを作っているのですが、複数のアニメーションを条件分岐させて動かしたいのです。
カウンターが(0~10)までは仮にAアニメーション、カウンターが(11~20)まではBアニメーションという具合です。

現在、一つ目のAアニメーションを動かすことと、カウンターで条件分岐させるところまではできてて、後は同じようにBアニメーションを追加すればOKなどと簡単に考えていたのですが・・・

runAction();でアニメーションをスタートできたので当然stopAction();でAアニメーションを止められると思ったのですが、
これができません。以下がここまでのコードです。

GameScene.cpp

コード:

//ボタンがタップされた時の処理
void GameScene::myCallback(CCObject* pSender)
{
    
    if(count < 10)
    {
        count++;
        CCLog("Count %03d", count);
        
         /// Aアニメーションフレームの生成
         CCAnimation* animation = CCAnimation::create();
         
         
         for( int i=0; i<4; i++ )
         {
         char filename[128] = {0};
         sprintf(filename,"xxx_0%d.png",i);
         animation->addSpriteFrameWithFileName(filename);
         }
         
         
        /// アニメーションを切り替える速度を決める
        animation->setDelayPerUnit( 0.3f );
        
        /// 無限ループさせる(-1)
        animation->setLoops(-1);
        
        /// アニメーションの生成
        CCAnimate* animate = CCAnimate::create(animation);
        animate->setTag(1);
        
        
        /// スプライトの生成
        CCSprite* sprite = CCSprite::create();
        
        /// レイヤーにスプライトを追加
        this->addChild(sprite);
        
        /// スプライト座標を設定する
        //pSprite->setPosition(CCPointMake(0.0f,0.0f));
        CCSize size = CCDirector::sharedDirector()->getWinSize();
        sprite->setPosition( ccp(size.
                                 width *0.5, size.height *0.5));
        
        
        /// アニメーションを実行する
        sprite->runAction(animate);

    }
    else if (count < 20){
        count++;
        CCLog("Count %03d", count);
        
        //Aアニメーションを止める
        sprite->stopActionByTag(1);

       //ここにBアニメーションを入れる
        
    }
    else{
    }
 }

自分でネット上を色々と調べてみると「アニメーションにTagを設定しておくことで、別メソッドでもアニメーションの実行や停止を制御することが可能になります。」とあったのでTagをつけてelse ifの中でsprite->stopActionByTag(1);としてAアニメーションを止めようとしましたがエラー「Use of undeclared identifier 'sprite'」となります。
sprite->runAction(animate);ではエラーも出ずに上手く動いているのになぜ「spriteが宣言されていません」となるのでしょうか?

ネット上には同じメソッド内でアニメーションを制御する例はたくさんあるのですが、条件分岐をまたぐとダメなのでしょうか?このやり方の解決方法もしくは他に良い方法があれば教えてください。
よろしくお願いいたします。

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: cocos2d-xでアニメーションStopについて

#2

投稿記事 by ISLe » 10年前

変数は、それが宣言されたブロックの終わりまでが有効な範囲です。

34行目で宣言されたsprite変数は、49行目までが有効範囲です。
なので55行目では使えません。

解決方法としては前のトピックと同様で、メンバ変数にしてください。

C/C++の基本事項なので、入門書等で基礎をしっかり勉強されたほうが良いかと思います。


ついでに先回りしておきますが、countはボタンが押されたときにしかカウントされません。
アニメーションは、ユーザー操作とは無関係に、設定した時間間隔で並行して再生されるはずです。

アニメーションの生成は、GameSceneクラスの初期化処理で行いましょう。
ボタンが押されたときは、アニメーションが再生されているかどうかを判定して切り替えましょう。

閉鎖

“C言語何でも質問掲示板” へ戻る