2014-01-20 4 views
0

У меня есть объект, который я создаю, что вызывает у меня некоторые проблемы с сохранением. Я делаю объект, на котором анимация повторяется навсегда. Когда я удаляю строку, которая добавляет анимацию и повторяется, она не сохраняется, но когда я добавляю строку обратно, я могу сказать, используя инструменты, которые сохраняются в объекте. Вот код, который я использую. Не знаю, в чем проблема.CAAction вызывает удержание

- (id)initWithConveyorId:(int)conveyorId { 

    self = [super init]; 
    if (self) { 

    self.conveyorId = conveyorId; 
    self.zOrder = kZLevelWaterTile; 
    [self setFlowTexture]; 
    } 
    return self; 
} 

- (void)setFlowTexture { 

    NSMutableArray *animationFrames = [NSMutableArray array]; 

    for (int i=1; i<=kNumberOfDirections; i++) { 
    [self addAnimationFrameToArray:animationFrames withIndex:i andFlow:kWest]; 
    } 

    [self runAnimationWithFrames:animationFrames]; 
} 

- (void)addAnimationFrameToArray:(NSMutableArray*)animationFrames withIndex:(int)index andFlow:(NSString*)flow{ 

    NSString* textureName = [NSString stringWithFormat:kTextureFlow, flow]; 
    CCSpriteFrame* frame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: 
          [NSString stringWithFormat:kSpriteFrame, textureName, index]]; 
    [animationFrames addObject:frame]; 
} 

- (void)runAnimationWithFrames:(NSMutableArray*)animationFrames { 


    CCAnimation* flowAnimation = [CCAnimation animationWithSpriteFrames:animationFrames delay:0.1]; 

    CCAction* flowAction = [CCRepeatForever actionWithAction: 
          [CCAnimate actionWithAnimation:flowAnimation]]; 
    [self runAction:flowAction]; 
} 

любое понимание того, почему это вызывает удержание, было бы здорово! Благодаря!

EDIT:

вот код, который создает конвейер. методы внутри этого метода являются убедительными методами. Я тестировал тезисы, и единственная проблема, которую я получаю, - это добавить анимацию с помощью CCAction.

- (void)constructRiverWithMaximum:(int)amount { 

    FFTile* freeTile = [self.matrix getFreeTile]; 
    FFConveyor* currentConveyor = [[FFConveyor alloc] initWithConveyorId:self.conveyorId]; 

    [self replaceTile:freeTile to:currentConveyor]; 
    amount--; 
    int countConveyorsOnRiver = 1; 

// FFConveyor* currentConveyor = firstConveyor; 
    BOOL hasNext; 
    FFConveyorFlow directionOfLastTile = FFConveyorFlowNoDirection; 
    int count = 0; 
    do { 

    int x = currentConveyor.columnIndex; 
    int y = currentConveyor.rowIndex; 

    NSArray* weights = [self getWeightsByX:x Y:y]; 
    NSArray* probabilities = [self getProbabilitiesByWeights:weights standardWeight:self.standardWeight]; 

    int directionOfCurrentTile = [self defineDirection:probabilities withConveyorCount:countConveyorsOnRiver]; 
    if (directionOfCurrentTile == kConveyorOver) { 

     hasNext = false; 
     directionOfCurrentTile = directionOfLastTile; 
    } 
    else { 
     if (amount <= 0){ 
     hasNext = false; 
     } else { 
     hasNext = true; 
     } 

    } 

    [self setFlowDirectionFrom:directionOfLastTile to:directionOfCurrentTile forConveyor:currentConveyor]; 

      currentConveyor = [self switchToTurningConveyorIfNeededForConveyorTile:currentConveyor]; 
    //[currentConveyor setFlowTexture]; 
    directionOfLastTile = directionOfCurrentTile; 

    if (hasNext) { 

     int conveyorIndex = [self.matrix nextIndexByX:x Y:y direction:directionOfCurrentTile]; 
     FFTile* tile = [self.matrix.tiles objectAtIndex:conveyorIndex]; 

     if ([self.matrix isTileFree:tile]){ 

     currentConveyor = [self createConveyorAtIndex:conveyorIndex]; 
     amount--; 
     countConveyorsOnRiver++; 
     } else { 

     hasNext = false; //end because find another conveyor tile 
     } 
    } 
    count++; 
    } while (hasNext); 
    self.conveyorId++; 
} 
+0

В чем проблема? какой объект сохраняется? Почему у вас проблема? – YvesLeBorg

+0

удерживаемый объект является конвейерным объектом. сохранение является проблемой, потому что, как только пользователь завершит уровень, его слом и новый будут введены, поэтому этот должен быть отменен. – user1179321

+0

отправьте код, где создается и используется конвейер – LearnCocos2D

ответ

0

Я не совсем понимаю этот вопрос. Но если вы спрашиваете, почему ваши объекты сохраняются при добавлении их:

  1. Согласно коду это потому, что вы добавляете их в изменяемом массив (который сохранит объект так долго, как это «внутри» массив).

  2. Я также не вижу, что вы потенциально создаете новые объекты, а затем добавляете их в массив, но не освобождаете их после их создания (предполагая, что это удобные методы их создания).

  3. Не зная больше о коде снаружи здесь, если вы управляете памятью вручную (т. Е. Не в ARC), вам необходимо вручную освободить свой массив (и даже сначала отпустить все его объекты для обеспечения безопасности) в методе dealloc.

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