2013-03-08 6 views
0

В следующем коде, как я могу сказать, есть 5 яблок в массиве, они будут падать один за другим с помощью пары секунд (или случайных секунд) между ними. Каждый раз, когда яблоко падает, массив переходит 5-1 = 4, затем 4-1 = 3 и т. Д., И когда он достигает 1-1 = 0, он должен прекратить падение яблок.cocos2d вычитание объектов из массива

мой .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)]; 
      } 
     } 
    } 

Любая помощь будет оценена !!

ответ

1

Обязательно включите фреймворк QuartzCore и ссылку на него.

Добавьте эти переменные экземпляра в вашем .h:

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

В вашем .m метод инициализации добавить следующую строку:

_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; 

} 
+0

Спасибо за ответ Брэндон. Я имел в виду, что яблоки должны падать 1 за другим. Скажем, первое яблоко падает, а затем через 2 секунды следующего падает, а затем через 2 секунды следующего и т. Д. Это не должно быть ровно 2 секунды. Я также мог бы использовать arc4random(), чтобы рандомизировать время между ними, но я не уверен, как чтобы яблоки падали один за другим. Код, который я только что сбросил 5 яблок одновременно и с той же скоростью. Если бы вы могли помочь мне с этим, это было бы здорово! Заранее спасибо :) –

+0

Я обновил свой ответ. Я не на своем компьютере-разработчике, поэтому я не мог проверить это, но это должно сработать. Дайте мне знать, как это происходит для вас. Имейте в виду, что если он добавляет пробежки по массиву до того, как первое яблоко закончит его падение, оно переместит его обратно в начало, чтобы снова начать падать. –

+0

Привет, Брэндон, спасибо за вашу помощь! Это действительно не работает, но я думаю, что я не могу понять, почему он рушится. Он перемещает яблоко на пару пикселей вниз, а затем другое яблоко перемещается вниз таким же образом, а затем оно падает. Apple снова падает с вершины, потому что я тестировал что-то с выражением if в коде, и я забыл его вынуть. Не нужно, чтобы оператор if. Пожалуйста, дайте мне знать, если он работает на вашем компьютере. Заранее спасибо. –

Смежные вопросы