0

次のコードでは、5つのリンゴが配列に含まれていると言うことができます。それらは、数秒(またはランダムな秒)の間に1つずつ落下します。リンゴが落ちるたびに、配列は5-1 = 4、次に4-1 = 3などになり、1-1 = 0に達すると、リンゴを落として停止する必要があります。

私の.hファイル:

@interface xyz : CCLayer {
        CCArray *appleArray;
}

@property (nonatomic, retain) CCArray *appleArray;

私の.mファイル:

@synthesize appleArray;

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

            // Init 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;
                [Apple setPosition:ccp(positionX, 768)];

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

            [self scheduleUpdate];
        }
        return self;
    }

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

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

            Apple.position = ccp(Apple.position.x, Apple.position.y -300*dt);
            if (Apple.position.y < -100+64)
            {
                int positionX = arc4random()% 450; //not 1000
                [Apple setPosition:ccp(positionX, 768)];
            }
        }
    }

どんな助けでもいただければ幸いです!!

4

1 に答える 1

1

必ずQuartzCoreフレームワークを含めてリンクしてください。

これらのインスタンス変数を.hに追加します。

int _lastSpawn;
double _mediaTime;
int _mediaTimeInt;
int _lastIndex;
BOOL _randomTimeSet;
int _randomTime;

.m initメソッドに、次の行を追加します。

_mediaTime = CACurrentMediaTime();
_lastSpawn = (int)_mediaTime;

更新方法を次のように変更します。

-(void) update: (ccTime) dt
{

    // Get Random Time Interval between 0 and 10 seconds.
    if(!_randomTimeSet) {
        _randomTime = arc4random() % 11;
        _randomTimeSet = YES;
    }

    // Set current time
    _mediaTime = CACurrentMediaTime();
    _mediaTimeInt = (int)_mediaTime;

    // Check to see if enough time has lapsed to spawn a new Apple.
    if(_mediaTimeInt < (_lastSpawn + _randomTime)) { return; }

    // Check if first apple has been added or last apple has been added.
    NSNumber *num = [NSNumber numberWithInt:_lastIndex];
    if(num == nil) {
        _lastIndex = 0;
    } else if(num == [appleArray count]-1) {
        _lastIndex = 0;
    }

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

    Apple.position = ccp(Apple.position.x, Apple.position.y -300*dt);
    if (Apple.position.y < -100+64)
    {
        int positionX = arc4random()% 450; //not 1000
        [Apple setPosition:ccp(positionX, 768)];
    }
    _lastIndex += 1;
    _randomTimeSet = NO;
    _mediaTime = CACurrentMediaTime();
    _lastSpawn = (int)_mediaTime;

}
于 2013-03-09T19:32:40.003 に答える