我有一个可以奔跑和跳跃的 Sprite (如马里奥),我正在使用状态机来帮助运行动画 Action ,我正在使用纹理图集,并且一切正常。
- (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
最佳答案
在我的 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];
}
在 cat 类中预加载声音
@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 套件帧率在开始时下降并且仅下降一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20579948/