1

フルーツが上から落ちてきて、ユーザーがクリックして集めるシンプルなゲームを作りたいです。私の問題は、たとえば、落ちたリンゴをクリックすると消えるため、これまでに収集できるリンゴは1つだけです。5 個のリンゴのような配列を作成して、ランダムな速度とランダムな位置で落下させる必要があります。そして、最後のものが収集されると、それは消えるはずです。

これは私が今試していることであり、うまくいかないようです: これは CCSprite Apple が作成される場所です:

    for (int i = 0; i < 5; i++) {
        Apple = [CCSprite spriteWithFile:@"Apple4.png"];
        [self addChild:Apple];
        int positionX = arc4random()%450;
        [Apple setPosition:ccp(positionX, 768)];
    }

そしてこれは上から下への動きのために:

-(void) callEveryFrame:(ccTime)dt
{
    Apple.position = ccp(Apple.position.x, Apple.position.y -300*dt);
    if (Apple.position.y < -100+64)
    {
        int positionX = arc4random()%1004;
        [Apple setPosition:ccp(positionX, 768)];
    }
}

どんな助けでも大歓迎です!ありがとう

4

1 に答える 1

1

注: ランダムな位置と速度を追加する編集済みのソリューション。注2:タッチ検出を追加した新版。

5 つの CCSprites を格納する単一の変数を使用します。最後に、その変数には最後の CCSprite のみが含まれます。

CCSprite を CCArray (または NSMutableArray) に格納する必要があります。

ヘッダーファイル .h でこれを試してください:

@interface xyz : CCLayer {
        CCArray *appleArray;
}

@property (nonatomic, retain) CCArray *appleArray;

実装ファイル .m で:

@synthesize appleArray;

- (id) init
{
    if( (self=[super init])) {

        self.touchEnabled = YES;

        // Inicialize CCArray
        self.appleArray = [CCArray arrayWithCapacity:5];

        for (int i = 0; i < 5; i++) {
            CCSprite *Apple = [CCSprite spriteWithFile:@"Apple4.png"];
            [self addChild:Apple];

            int positionX = arc4random()%450;
            int positionY = 768 + arc4random()%1000;
            // Store speed 
            float speed = 150 + arc4random()%400;
            Apple.tag = speed;
            [Apple setPosition:ccp(positionX, positionY)];

            // Add CCSprite into CCArray
            [appleArray addObject:Apple];
        }

        [self scheduleUpdate];
    }
    return self;
}

- (void) update: (ccTime) dt
{
    for (int i = 0; i < 5; i++) {

        CCSprite *Apple = ((CCSprite *)[appleArray objectAtIndex:i]);

        if (Apple.position.y > -250) {
            Apple.position = ccp(Apple.position.x, Apple.position.y - (Apple.tag*dt));
        }
    }
}

- (void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInView:[touch view]];
    location = [[CCDirector sharedDirector] convertToGL:location];

    for (CCSprite *Apple in self.appleArray)
    {
        if (CGRectContainsPoint(Apple.boundingBox, location))
        {
            Apple.visible = NO;
        }
    }
}
于 2013-03-07T20:20:16.730 に答える