0

cocos2dを使って複数のステージでゲームを開発しようとしています。たとえば、あるレベルでは、4つのスプライト、2つは白、2つは黒です。プレイヤーが黒のスプライトをヒットした場合、ゲームは終了し、白のスプライトをヒットした場合、彼は勝ちます。プレーヤーが白いスプライトに当たった場合に、シーンに他の白いスプライトが存在するかどうかを確認し、存在する場合はゲームを続行するという条件を実装するにはどうすればよいですか。ない場合、彼はステージクリアシーンに行きますか?スプライトを2つの異なる配列(arrayBlackとarrayWhite)に配置しようとしましたが、白いスプライトの条件を作成する方法に固執しています。誰かが私にこれの良い例を示すアイデアや提案やチュートリアルを教えてもらえますか?

更新:私はそれを自分で理解しました。これが私のコードです:

-(id) init
{
if( (self=[super init]) ) {
    CGSize winSize = [[CCDirector sharedDirector] winSize];
    self.isTouchEnabled = YES;

    //These are declared in the .h class
    blackArray = [[NSMutableArray alloc]init];
    whiteArray = [[NSMutableArray alloc]init];

    black1 = [CCSprite spriteWithFile:@"b1.png"];
    black1.position = ccp(100, 160);

    black2 = [CCSprite spriteWithFile:@"b2.png"];
    black2.position = ccp(105, 150);

    white = [CCSprite spriteWithFile:@"w1.png"];
    white.position = ccp(150, 150);

    white2 = [CCSprite spriteWithFile:@"w2.png"];
    white2.position = ccp(80, 160);

    [self addChild:black1 z:1 tag:1];
    [self addChild:black2 z:1 tag:2];
    [self addChild:white z:1 tag:3];
    [self addChild:white2 z:1 tag:4];

    [blackArray addObject:black1];
    [blackArray addObject:black2];
    [whiteArray addObject:white];
    [whiteArray addObject:white2];
}
return self;}

-(void) ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
NSSet *allTouch = [event allTouches];
UITouch *touch = [[allTouch allObjects]objectAtIndex:0];
CGPoint location = [touch locationInView:[touch view]];
location = [[CCDirector sharedDirector]convertToGL:location];

endTouch = location;
posX = endTouch.x;

//Minimum swipe length
posY = ccpDistance(beginTouch, endTouch);

//selectedSprite is a sprite declared in .h file
if(selectedSprite.tag == 1 || selectedSprite.tag == 2)
{
    //action here
}

if([whiteArray count] > 0)
{
    if(selectedSprite.tag == 3 || selectedSprite.tag == 4)
    {
        //action here
    }
    [whiteArray removeObject:selectedSprite];

    if([whiteArray count] == 0)
    {
        //Go to game over
    }
}}

これはきれいに見えませんが、機能します。とにかく、私が現在行っている方法よりもこれを実装するためのより良い方法がある場合は、私に知らせてください。

4

1 に答える 1

2

配列(arrayBlackおよびarrayWhite)を変更可能にします。それで、

if(user hit sprite1)
{
   if([arrayBlack containsObject:sprite1])
   {
     [arrayBlack removeObject:sprite1];
     // Game over
   }
   else
   {
     [arrayWhite removeObject:sprite1];

     if(arrayWhite.count>0)
     {
       // Continue game
     }
     else
     {
       // Stage clear scene
     }
   }
}
于 2013-01-31T05:04:54.140 に答える