Spritekit 动画加载时间
Posted
技术标签:
【中文标题】Spritekit 动画加载时间【英文标题】:Spritekit animation load time 【发布时间】:2014-04-09 11:59:41 【问题描述】:我有一个简单的游戏,我一直在开发,这是一个可以拯救猫的横向卷轴太空冒险游戏。一个非常简单的游戏,但我遇到了一个问题。我的游戏正常启动,显示主菜单场景。点击播放,它毫无问题地过渡到游戏场景,但是,我发现当我第一次按开始开始游戏时,我得到了一点加载延迟。此延迟仅在您第一次加载游戏时出现。
点击开始后,会调用以下方法:
-(void)nonplayerSprites:(StartReason)endReason
if (endReason == kStartGame)
// [self playMusic:@"Electrodoodle.mp3"];
[self spawnPlayer];
[self setupUI];
[self runAction:[SKAction repeatActionForever: [SKAction sequence:@[[SKAction
performSelector:@selector(enemySpawn) onTarget:self],
[SKAction waitForDuration:2.0]]]]];
[self runAction:[SKAction repeatActionForever: [SKAction sequence:@[[SKAction
performSelector:@selector(spawnCat) onTarget:self],
[SKAction waitForDuration:1.5]]]]];
[self runAction:[SKAction repeatActionForever: [SKAction sequence:@[[SKAction
performSelector:@selector(powerUpSpawnCheck) onTarget:self],[SKAction
waitForDuration:2.0]]]]];
else if (endReason == kEndGame)
[self removeAllActions];
else if (endReason == kRestartGame)
MainGame * myScene =
[[MainGame alloc] initWithSize:self.size];
SKTransition *reveal =
[SKTransition fadeWithDuration:0.5];
[self.view presentScene: myScene transition: reveal];
我有四个它调用的精灵节点,一个 UFO、一只猫、玩家火箭和一个随机加电。通过 spawnUI 方法调用两个用于玩家得分和总生命的 SKLabelNode,此外,还会播放音乐。虽然我目前已禁用它。
敌方和友方节点都使用类似的方法调用:
-(void)enemySpawn
int enemyChoice = [self getRandomNumberBetween:0 to:1];
if (enemyChoice == 0)
_enemy = [SKSpriteNode spriteNodeWithImageNamed:@"enemy"];
[_enemy setScale:1.0];
else if (enemyChoice == 1)
_enemy = [SKSpriteNode spriteNodeWithImageNamed:@"enemy_alt"];
[_enemy setScale:0.50];
_enemy.anchorPoint = CGPointZero;
_enemy.zPosition = 2.0;
_enemy.name = @"rocket";
_enemy.position = CGPointMake(self.size.width + _enemy.size.width, [self
getRandomNumberBetween:0 to:250]);
SKAction *enemyMove = [SKAction sequence:@[[SKAction moveToX:-40 duration:[self
getRandomNumberBetween:2 to: 5]],
[SKAction removeFromParent]]];
[_worldNode addChild:_enemy];
[_enemy runAction:enemyMove];
我觉得我知道问题出在哪里,游戏数据是第一次加载到内存中,但是如何避免加载时暂停?我想知道我是否做错了什么,因为我加载的内容似乎不足以在点击开始按钮时导致明显的 1 到 3 秒暂停。第二次,比如在玩家死亡并重新启动后,暂停消失了,一切顺利进行。如果我遗漏了任何重要信息,我深表歉意,我是 SpriteKit 的新手。
有人有什么想法吗?
提前致谢。
【问题讨论】:
【参考方案1】:我遇到了同样的问题。
似乎当您使用 [SKSpriteNode spriteNodeWithImageNamed:@"enemy"] 或 *[SKSpriteNode spriteNodeWithImageNamed:@"enemy_alt"]* 或任何其他 纹理加载方法,纹理没有存储在缓冲区中以便快速访问,所以第一次调用这些方法会给你带来延迟。
接下来是解决方案:
为您的游戏对象纹理添加属性
@property(nonatomic,strong) SKTexture *enemyTexture; . . .
向场景子类添加方法:
-(void)preloadTextures
self.enemyTexture = [SKTexture textureWithImageNamed:@"enemy"];
.
.
.
.
[SKTexture preloadTextures:@[self.enemyTexture,...] withCompletionHandler:^
NSLog(@"Textures preloaded");
];
现在在演示之前调用该方法
MainGame * myScene =
[[MainGame alloc] initWithSize:self.size];
SKTransition *reveal =
[SKTransition fadeWithDuration:0.5];
[myScene preloadTextures];
[self.view presentScene: myScene transition: reveal];
希望它也能帮到你。
【讨论】:
在游戏的第一个场景中还是在主视图控制器中预加载我的图像更好?原谅我的无知,这是我的第一个 spritekit 项目。以上是关于Spritekit 动画加载时间的主要内容,如果未能解决你的问题,请参考以下文章