現在取り組んでいるゲームのゲームレイヤーに複数のアニメーション化されたスプライトを追加しようとしています。これを行うために、インスタンス スプライト 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 か、それらに沿った何か行なので、基本的に私ができる必要があるのは、ブンセンを再宣言することです。これにより、以前に追加されたブンセンでアクション「ブンセン」を停止せずに、子が既に追加されたエラーをスローしませんが、簡単な方法は考えられませんこれを行うの... 誰か?