Итак, для моей игры я добавляю несколько спрайтов в массив, и чем больше спрайтов я добавляю, тем быстрее моя игра начинает работать? Я предполагаю, что мой вопрос будет, добавляет ли спрайты, подобные этому, а затем вызывает их свойства в цикле для создания проблем? Или проблема в другом месте. Я определил, что добавление дополнительных «грунтовых» спрайтов увеличивает высоту прыжка, скорости движения и скорости прокрутки. Должен ли я переключиться на тайлинг, чтобы решить эту проблему?Спрайты в массиве
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");
}
}
Можете ли вы написать всю (CCSprite * земля в коробках) код? У меня такое чувство, что оно имеет какое-то отношение к коду, который у вас есть –
Это должно быть все – user1569940
Так что из того, что я могу сказать после кратковременного просмотра кода, я предполагаю, что должно быть только одно из тех операторов if, которые возвращаются правда, это правильно? –