我已经构建了一个类似于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];
}