2013-03-31 2 views
0

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

CCSprite *ground = [CCSprite spriteWithFile:@"testlevel 5.png"]; 
      [ground setPosition:ccp(520, 10)]; 
      [ground setScale:1.0]; 
      //[ground setScaleX:(2 * ground.contentSize.width)]; 
      [self addChild:ground z:0]; 
      [boxes addObject:ground]; 

      ground = [CCSprite spriteWithFile:@"testlevel 4.png"]; 
      [ground setPosition:ccp(ground.contentSize.width/2 +400, -50)]; 
      [ground setScale:1.0]; 
      //[ground setScaleX:(2 * ground.contentSize.width)]; 
      [self addChild:ground z:0]; 
      [boxes addObject:ground]; 

      ground = [CCSprite spriteWithFile:@"testlevel 3.png"]; 
      [ground setPosition:ccp(ground.contentSize.width/2 +280, -10)]; 
      [ground setScale:1.0]; 
      //[ground setScaleX:(2 * ground.contentSize.width)]; 
      [self addChild:ground z:0]; 
      [boxes addObject:ground]; 

Это выше сегмент, где я добавить изображения в массив, и когда я хочу, чтобы проверить вещи, как пересечение между моим характером спрайта и землей я использую цикл, как это:

gravity -= 2 ; 


for(CCSprite *ground in boxes){ 

    if(CGRectIntersectsRect(_character.boundingBox, ground.boundingBox) && !jump && (_character.position.y > ground.position.y + ground.contentSize.height/2 -20) && _character.position.x > ground.position.x - ground.contentSize.width/2 && facingLeft) 
    { 
     _character.position = ccp(_character.position.x, ground.position.y + ground.contentSize.height/2 + _character.contentSize.height/2-.001); 
     falling = NO; 
     onGround = YES; 
     gravity = 0; 
     if(!_moving){ 
      [_character setDisplayFrame: 
      [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: @"1-1.png"] ]; 
     } 
    } 

    else if(CGRectIntersectsRect(_character.boundingBox, ground.boundingBox) && !jump && (_character.position.y > ground.position.y + ground.contentSize.height/2-20) && _character.position.x < ground.position.x + ground.contentSize.width/2 && !facingLeft) 
    { 
     _character.position = ccp(_character.position.x, ground.position.y + ground.contentSize.height/2 + _character.contentSize.height/2-.001); 
     falling = NO; 
     onGround = YES; 
     gravity = 0; 
     if(!_moving){ 
      [_character setDisplayFrame: 
      [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: @"1-1.png"] ]; 
     } 
    } 

    else if(CGRectIntersectsRect(_character.boundingBox, ground.boundingBox) && (targetX <= 0) && (_character.position.y +_character.contentSize.height < ground.position.y + ground.contentSize.height) && (_character.position.x > ground.position.x) && (gp.isControlling && (gp.controlQuadrant == 2 || gp.controlQuadrant == 3))) 
    { 
     backgroundX = 0; 
     targetX = 0; 

    } 
    else if(CGRectIntersectsRect(_character.boundingBox, ground.boundingBox) && (_character.position.y +_character.contentSize.height < ground.position.y + ground.contentSize.height) && (_character.position.x < ground.position.x) && (gp.isControlling && (gp.controlQuadrant == 0 || gp.controlQuadrant == 1))) 
    { 

     backgroundX = 0; 
     targetX = 0; 
    } 

    else 
    { 
     normalForce = 0; 
     jump = NO; 
     falling = YES; 
     doubleJump = 0; 
    } 


    // totalForce = normalForce + gravity; 
    // [_character setPosition:ccp(_character.position.x, _character.position.y+totalForce)]; 
     } 
totalForce = normalForce + gravity; 
if(gravity == 0) { 
    falling = NO; 
    NSLog(@"Gravity = 0"); 
} 

[_character setPosition:ccp(_character.position.x + targetX, _character.position.y + totalForce)]; 

}

прыжки контролируются простой кнопкой, которая добавляет intager около 10 к гравитации. У меня есть таймер работает моя функция клеща, в которой гравитация выглядит следующим образом:

gravity -=1; 

и добавить это значение в моей позиции символов, тяжесть получает значение 0, когда в верхней части окна. Игроки влево/вправо контролируются джойстиком, который просто обновляет скорость с помощью функции tick. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать, но опять же, добавление большего количества спрайтов с именем ground в массив меняет скорость по неизвестной причине. Любая помощь приветствуется.

Вот функция аннулируются для скачка

-(void)jumpTapped 
{ 
    NSLog(@"PRESSED"); 
    if(!falling && onGround){ 
     doubleJump += 1; 
     gravity += 10; 
     jump = YES; 
     onGround = NO; 
     NSLog(@"JUMPING"); 
    } 
} 
+0

Можете ли вы написать всю (CCSprite * земля в коробках) код? У меня такое чувство, что оно имеет какое-то отношение к коду, который у вас есть –

+0

Это должно быть все – user1569940

+0

Так что из того, что я могу сказать после кратковременного просмотра кода, я предполагаю, что должно быть только одно из тех операторов if, которые возвращаются правда, это правильно? –

ответ

0

в коде

} else { 
    normalForce = 0; 
    jump = NO; 
    falling = YES; 
    doubleJump = 0; 
} 

установить прыжок НЕТ так, если первый спрайт она проходит через в петле и не соответствует ни одному из тех утверждений if, это будет по умолчанию. Затем в следующий раз, когда он пройдет через прыжок, будет установлено значение NO, которое сбрасывает ваше начальное значение с момента нажатия кнопки, следовательно, код, чтобы заставить игрока прыгать, никогда не будет работать.

+0

. Скачок равняется нет, это просто проверка погоды или не нажатие кнопки, я смог исправить проблему, добавив условие тяжести <0 для моего оператора if. Спасибо огромное! это давало мне довольно большую головную боль, но теперь она исправлена! Вероятно, я скоро перейду к плиткам, чтобы сэкономить время на ввод координат для объектов, способных сталкиваться. – user1569940

+0

Рад, что это сработало, ваши инструкции if также основали обнаружение столкновения от прыжка var. то есть в ваших утверждениях if, которые он сказал &&!jump && означает, что если jump был установлен в NO, то он пропустил бы оператор if –

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