sprite kit 帧速率在开始时下降并且只有一次

Posted

技术标签:

【中文标题】sprite kit 帧速率在开始时下降并且只有一次【英文标题】:sprite kit frame rate dip at start and only once 【发布时间】:2013-12-14 05:19:36 【问题描述】:

我有一个可以奔跑和跳跃的精灵(如马里奥),我正在使用状态机来帮助运行动画动作,我正在使用纹理图集,一切正常。

 - (void)jumpingphysics 

if (_JumpBool && self.onGround) 
    _doubleJumpBool = YES;
    _JumpBool = NO;

    [self catJump];
    self.physicsBody.velocity = CGVectorMake(0.0, 600);

// double jump
if (_JumpBool && _doubleJumpBool) 
    self.physicsBody.velocity = CGVectorMake(0.0, 600);
    [self catDoubleJump];
    _doubleJumpBool = NO;
    _JumpBool = NO;



这是被调用的方法。

 - (void)catJump 
if (_actionState == kActionStateIdle || _actionState == kActionStateWalk || _actionState ==         kActionStateJump) 
    [self removeAllActions];
    [self runAction:_jumpAction];
    SKAction *jumpFx = [SKAction playSoundFileNamed:@"jump.wav" waitForCompletion:NO];
    [self runAction:jumpFx];
    _actionState = kActionStateJump;



这是我创建帧数组动画的地方。

 - (void)catJumpAnimation 
int i;

NSMutableArray *jumpFrames = [NSMutableArray arrayWithCapacity:9];
for (i = 1 ; i < 9; ++i) 
    NSString *frames = [NSString stringWithFormat:@"jump%d.png",i];
    SKTexture *temp = [catAtlas textureNamed:frames];
    [jumpFrames addObject:temp];

    self.jumpAction = [SKAction animateWithTextures:jumpFrames timePerFrame:1.0 / 16.0       resize:YES restore:NO];


问题是在 iPad mini 上运行时,当我第一次跳跃时,我的帧速率下降到 40,只有第一次,而且只在我的 iPad mini 上,而不是我的 iPhone 5 c。

我知道它的 [self catJump] 调用会导致帧速率下降,但我很困惑为什么只有那个调用会导致下降,我还有其他动画可以做更多的工作但不会导致下降。

任何想法将不胜感激。 :D

【问题讨论】:

@LearnCocos2D 循环抱歉,在这里。我对此有一个临时修复,我在猫精灵初始化后立即调用 catJump 方法,因此当场景准备好时,不会有任何帧速率下降。我不喜欢它,哈哈:p 非常感谢你的帮助! 这可能是你的猫第一次跳跃时加载的声音文件。在您的设置中预加载声音文件,看看是否能解决问题。 可能是这个的副本 - ***.com/questions/19739596/… @prototypical 是的!这就是导致下跌的原因!谢谢你! 【参考方案1】:

在我的 ActionSprite.h 类中处理控制动画和声音的方法。

 @interface ActionSprite : SKSpriteNode

 @property (nonatomic,strong)SKAction *jumpFx;
 @property (nonatomic,strong)SKAction *DjumpFx;
 @property (nonatomic,strong)SKAction *hurtFx;
 @property (nonatomic,strong)SKAction *dashFx;
 @property (nonatomic,strong)SKAction *defeatFx;
 @property (nonatomic,strong)SKAction *powerFx;
 @property (nonatomic,strong)SKAction *bounceFx;
 @property (nonatomic,strong)SKAction *rocketFx;

在我的 ActionSprite.m 中

  @implementation ActionSprite

- (id)init 
   if (self = [super init]) 


  
  return self;
  

- (void)preLoadSound 
_jumpFx = [SKAction playSoundFileNamed:@"jump.wav" waitForCompletion:NO];
_DjumpFx = [SKAction playSoundFileNamed:@"dJump.wav" waitForCompletion:NO];
_hurtFx = [SKAction playSoundFileNamed:@"cat hurt.wav" waitForCompletion:NO];
_defeatFx = [SKAction playSoundFileNamed:@"defeat.wav" waitForCompletion:NO];
_bounceFx = [SKAction playSoundFileNamed:@"bounce.wav" waitForCompletion:NO];
_powerFx = [SKAction playSoundFileNamed:@"power.mp3" waitForCompletion:NO];
_rocketFx = [SKAction playSoundFileNamed:@"rocketFx.wav" waitForCompletion:NO];


在猫类中预加载声音

 @implementation Cat

 SKTextureAtlas *catAtlas;

   - (id)init 
   if (self = [super initWithImageNamed:@"idle.png"]) 
    catAtlas = [SKTextureAtlas atlasNamed:@"idle.plist"];

    [self preLoadSound];


return self;

不再有延迟! :D

【讨论】:

以上是关于sprite kit 帧速率在开始时下降并且只有一次的主要内容,如果未能解决你的问题,请参考以下文章

限制 Sprite 套件帧率

Sprite Kit翻转播放器XScale

opengl3 20k sprites 帧速率慢?

FPS在SpriteKit中下降

使用 Sprite Kit 移动背景

Sprite Kit 动画:Atlas 错误