I am trying to create a game mode where you have 30 seconds to hit as many targets as you can, however when the countdown timer starts, the frame rate drops significantly, preventing you to shoot multiple projectiles at once. Here's the countdown timer

-(void)update:(CFTimeInterval)currentTime {
/* Called before each frame is rendered */
//reset counter if starting
int highscoret = [[NSUserDefaults standardUserDefaults] integerForKey: @"highScoret"];    
if (startGamePlay){
    startTime = currentTime;
    startGamePlay = NO;
}
countDown.text = [NSString stringWithFormat:@"Start!"];

int countDownInt = 30.0 -(int)(currentTime-startTime);
if(countDownInt>0){ //if counting down to 0 show counter
    countDown.text = [NSString stringWithFormat:@"%i", countDownInt];
}else if(countDownInt==0) { //if not show message, dismiss, whatever you need to do.
    countDown.text=@"Time's Up!";

    self.highScoret.text = [NSString stringWithFormat:@"%d Baskets",highscoret];
    SKScene *endGameScene = [[GameOverT alloc] initWithSize:self.size];
    SKTransition *reveal = [SKTransition fadeWithDuration:0.5];
    [self.view presentScene:endGameScene transition:reveal];
    [self saveScore2];

    if (self.points > highscoret) {
        self.highScoret.text = [NSString stringWithFormat:@"%d Points",highscoret];
        [self saveScore];
        self.points = 0;
        self.scoreLabel.text = [NSString stringWithFormat:@"%d Points",_points];
    }

    else {
        self.points = 0;
        self.scoreLabel.text = [NSString stringWithFormat:@"%d Points",_points];
        self.highScoret.text = [NSString stringWithFormat:@"%d Points",highscoret];
    }


}
}

And here's other relevant code

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
/* Called when a touch begins */
for (UITouch *touch in touches) {
    CGPoint location = [touch locationInNode:self];
    if (CGRectContainsPoint(countDown.frame, location)){
        startGamePlay = YES;
        self.baskett = 0;
        [self reset];
    }
}

UITouch * touch = [touches anyObject];
CGPoint location = [touch locationInNode:self];

SKSpriteNode * object = [SKSpriteNode spriteNodeWithImageNamed:@"object.png"];
object.position = self.object2.position;

object.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:ball.size.width/2];
object.physicsBody.dynamic = YES;
object.physicsBody.categoryBitMask = objectCategory;
object.physicsBody.contactTestBitMask = targetCategory;
object.physicsBody.collisionBitMask = 0;
object.physicsBody.usesPreciseCollisionDetection = YES;
CGPoint offset = rwSub(location, object.position);

if (offset.y <= 0) return;

[self addChild:object];

CGPoint direction = rwNormalize(offset);

CGPoint shootAmount = rwMult(direction, 1000);

CGPoint realDest = rwAdd(shootAmount, object.position);

float velocity = 200/1.0;
float realMoveDuration = self.size.width / velocity;
SKAction * actionMove = [SKAction moveTo:realDest duration:realMoveDuration];
SKAction * actionMoveDone = [SKAction removeFromParent];
[ball runAction:[SKAction sequence:@[actionMove, actionMoveDone]]];
}

-(void)object:(SKSpriteNode *) object didCollideWithTarget:(SKSpriteNode *) target {
[ball removeFromParent];

[[self scene] runAction:[SKAction playSoundFileNamed:@"effect2.wav" waitForCompletion:NO]];
self.points++;
self.scoreLabel.text = [NSString stringWithFormat:@"%d Points",_points];

if (self.points == 3) {
    [self obstacle];
}

}

Can someone please tell me a workaround of how to possibly keep the frame rate from dropping?

Related posts

Recent Viewed