私の cocos2d ゲームでは、ある種の「パワーアップ」があり、一度達成すると、キャラクターが青色になり、プラットフォームが青色になり、背景も青色になります。これが最善の方法で実装されているかどうかはわかりませんので、他の提案があれば共有してください!:)
blueCalledというインスタンス変数を持つクラスBlueを作成しました
このクラスを「プラットフォーム」クラスと「プレーヤー」クラスの両方にインポートしました。
パワーアップとプレーヤーの衝突コードは、私の Platform クラス内にあります。これは、パワーアップがヒットしたときのコードです。
// try remove powerup
- (void) tryRemovePowerup
{
NSMutableArray * currentPowerUpArray = [self getcurrentPowersArr];
if(currentPowerUpArray)
{
int playerY = ((CCLayer*)(self.player)).position.y;
for(int x=0; x<[currentPowerUpArray count];x++)
{
CCSprite *powerup = [currentPowerUpArray objectAtIndex:x];
if(abs(powerup.position.x+powerup.parent.position.x-[Player initX])<50)
{
if(abs(powerup.position.y+blueberry.parent.position.y-playerY)<30 && powerup.visible && powerup.visible)
{
[power.parent powerup cleanup:YES];
CGSize winSize = [[CCDirector sharedDirector] winSize];
[[SimpleAudioEngine sharedEngine] playEffect:@"yay.wav" pitch:1 pan:0 gain:1];
// THIS IS WHERE ALL OF EFFECTS SHOULD HAPPEN
NSLog(@"powerup hit");
}
}
}
}
[self hitTestOB];
}
// THIS IS WHERE ALL OF EFFECTS SHOULD HAPPEN の場所は、すべてを青くしたい場所です。現時点では、Blue クラスのインスタンス変数を YES に設定することでこれを行う予定です。
1. メイン プレーヤーのフレーム、2. バックグラウンド、3. プラットフォーム フレームを処理するメソッドには、Blue クラスのインスタンス変数が YES か NO かをチェックする if ステートメントがあり、それに応じて動作します。ただし、プラットフォームとプレーヤー クラスで Blue クラスのインスタンス変数を使用する方法がわかりません。また、これがパワーアップを実装する最善の方法であると 100% 確信できるわけでもありません。
あなたが私に提供できる助けをありがとう:)
iOSに行きましょう!