gpt4 book ai didi

ios - Spritekit动画加载时间

转载 作者:行者123 更新时间:2023-12-02 14:51:28 24 4
gpt4 key购买 nike

我正在开发一个简单的游戏,这是一款横向卷轴太空冒险游戏,你可以在其中拯救猫。一个非常简单的游戏,但我遇到了一个问题。我的游戏正常启动,显示主菜单场景。点击播放,它会毫无问题地过渡到游戏场景,但是,我发现第一次按开始开始游戏时,我遇到了一些加载滞后。这种延迟仅在您第一次加载游戏时出现。

点击开始后,将调用以下方法:

-(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];
}

}

我有四个被它称为的 Sprite 节点,一个 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 还很陌生。

大家有什么想法吗?

提前致谢。

最佳答案

我也遇到了同样的问题。

似乎当您使用 [SKSpriteNode spriteNodeWithImageNamed:@"enemy"]*[SKSpriteNode spriteNodeWithImageNamed:@"enemy_alt"]* 或任何其他 纹理加载方法,纹理不会存储在缓冲区中以便快速访问,因此第一次调用这些方法会给您带来滞后。

解决方案如下:

为游戏对象纹理添加属性

@property(非原子,强) 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];

希望它也能帮到你。

关于ios - Spritekit动画加载时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22961850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com