spritekit触摸几分钟后停止工作

时间:2014-08-28 18:52:29

标签: ios xcode memory-management sprite-kit touchesbegan

我已经构建了一个类似于flappy bird的spritekit飞行游戏,主角使用物理来降低角色,并检测屏幕上其他东西的联系人。在一个水龙头上,角色有一种冲动适用于他上升。你可以向右滑动导致角色有一个冲动,使他向前移动并从屏幕右侧反弹。

此功能大约可以使用5分钟,使用的内存不足140MB,低于170MB。五分钟后,它可以停止接收水龙头。我的意思是,在角色按预期做出反应之前,我有时最多可以点击10次。其他时候它可能会错过一两个。如果水龙头不能可靠地执行,这对于用户来说将是一个主要的缺陷,这可能会导致您丢失游戏,因为角色在点击时没有反应。

我之前已经注意到问题发生在内存超过150MB但是我已经得出结论内存不是因为我已经能够在内存仅为130mb时实现这一点。我注意到的是,这种情况发生的时间大约是5或6分钟后。一旦我玩了大约2或3个级别的水龙头变得不可靠,尽管他们仍然有80%的时间工作。我玩的水平并没有引起问题,如果我在之前的版本中发挥问题发生的水平,那么问题就不会发生,只有在玩了大约5分钟之后,无论我先玩哪个级别。即使我连续几次玩同一级别,它也会在大约5分钟后开始发生。

以下是将向上冲动应用于并非始终有效的角色的代码。如你所见,我有一个NSLog让我知道系统是否收到我的水龙头。它大部分时间都会发生,但大约5分钟后不会发生。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    NSLog(@"Tapping the screen");
    if (disableTouches == NO){
        if(healthHits < 3){
            [hero.physicsBody applyImpulse:CGVectorMake(0, impulseAmount)];
            heroAttacking = NO;
            [self heroGoingUpSound];
            [self HeroFlapWings];
            UITouch *aTouch = [touches anyObject];
            CGPoint location = [aTouch locationInNode:self];
            slideBeginX = location.x;
        }
    }
}

我的问题是,是否有其他人遇到过这个问题或类似的问题,如果是这样,它是如何解决的?

根据要求,我的HeroFlapWings代码

- (void)HeroFlapWings {
    // get reference to the atlas
    SKTextureAtlas *atlas = [SKTextureAtlas atlasNamed:@"firefly2"];
    //get all image filenames
    NSArray *fireflyImages = [atlas textureNames];

    //sort the filenames
    NSArray *sortedNames = [fireflyImages sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

    // creat an array to hold the texture images
    NSMutableArray * fireflyTextures = [NSMutableArray array];


    for (NSString *filename in sortedNames){
        SKTexture *texture = [atlas textureNamed:filename];
        [fireflyTextures addObject:texture];
    }

    SKAction *flap = [SKAction animateWithTextures:fireflyTextures timePerFrame:0.1];
    SKAction *keepFlapping = [SKAction repeatAction:flap count:1];

    [hero runAction:keepFlapping];
}

0 个答案:

没有答案