2

現在取り組んでいるゲームのゲームレイヤーに複数のアニメーション化されたスプライトを追加しようとしています。これを行うために、インスタンス スプライト bunsen を作成しました。追加する必要があるすべての bunsen に対して、次のループを実行します。

else if (blockValue == 2 || blockValue == 3 || blockValue == 4 || blockValue == 5) {
                bunsen = [CCSprite spriteWithSpriteFrameName:@"15_1.png"];
                if (blockValue == 2) {
                    bunsen.rotation = 90;
                }
                else if (blockValue == 3) {
                    bunsen.rotation = 180;
                }
                else if (blockValue == 4) {
                    bunsen.rotation = 270;
                }
                float tileY = screenSize.height-((countery*startData4)+startData4/2+7.5)/2;
                float tileX = ((counterx*startData4)+startData4/2+5)/2;
                bunsen.position = ccp(tileX,tileY);
                tileName = [NSString stringWithFormat:@"%i.png",blockValue];
                [bunsen runAction:bunsens];
                [bunsenAnimation addChild:bunsen];

            }

これは、レベルにブンセンが 1 つしかない場合は正常に機能しますが、複数ある場合は、最後に追加されたブンセンのみがアニメーション化されます。これは、以前のすべてのブンセン インスタンスが元に戻される[CCSprite spriteWithSpriteFrameName:@"15_1.png"];ためだと思います。私のコードを次のように変更します。

else if (blockValue == 2 || blockValue == 3 || blockValue == 4 || blockValue == 5) {
                CCSprite *bunsen = [CCSprite spriteWithSpriteFrameName:@"15_1.png"];
                if (blockValue == 2) {
                    bunsen.rotation = 90;
                }
                else if (blockValue == 3) {
                    bunsen.rotation = 180;
                }
                else if (blockValue == 4) {
                    bunsen.rotation = 270;
                }
                float tileY = screenSize.height-((countery*startData4)+startData4/2+7.5)/2;
                float tileX = ((counterx*startData4)+startData4/2+5)/2;
                bunsen.position = ccp(tileX,tileY);
                tileName = [NSString stringWithFormat:@"%i.png",blockValue];
                [bunsen runAction:bunsens];
                [bunsenAnimation addChild:bunsen];

            }

注意: 今回の bunsen のローカル宣言では、スプライトがアニメーション化されることはありません...そしてbunsen = [CCSprite spriteWithSpriteFrameName:@"15_1.png"];、else if ループの開始前に to を移動すると、エラーが発生します: child already added か、それらに沿った何か行なので、基本的に私ができる必要があるのは、ブンセンを再宣言することです。これにより、以前に追加されたブンセンでアクション「ブンセン」を停止せずに、子が既に追加されたエラーをスローしませんが、簡単な方法は考えられませんこれを行うの... 誰か?

4

1 に答える 1

1

複数のノードで同じアクションを実行することはできません。変えるだけ

runAction:bunsens

runAction:[bunsens copy]
于 2012-10-31T20:05:34.480 に答える