• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 等待 [SKAction playSoundFileNamed :waitForCompletion:]

[复制链接]
菜鸟教程小白 发表于 2022-12-13 10:41:57 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

好吧,这个让我觉得自己像个白痴。

我在我的游戏中有一个方法,旨在通过使文本框中的文本一次弹出一个字母来为文本设置动画。在我的 DDTextBox 类中,有一个方法可以对其进行动画处理,称为 animateText。这是它的编码:

for (NSUInteger i = 1; i <= _text.length; i++)
    {
        [_scene runAction:[SKAction playSoundFileNamed"regularTextBeep.m4a" waitForCompletion:YES] completion:^{
            [_scene runAction:[SKAction waitForDuration:0.2] completion:^{
                ((SKLabelNode*)[_scene childNodeWithName"textBoxText"]).text = (NSString*)[_text substringToIndex:i];

                ((SKLabelNode*)[_scene childNodeWithName"textBoxText"]).position = CGPointMake(20 + (((SKLabelNode*)[_scene childNodeWithName"textBoxText"]).frame.size.width / 2.0), ((SKLabelNode*)[_scene childNodeWithName"insideOfTextBox"]).frame.size.height - (((SKLabelNode*)[_scene childNodeWithName"textBoxText"]).frame.size.height / 2.0) - 15);
                NSLog(@"Textbox loading a letter on iteration %u", i);
            }];
        }];
    }
    completion();

它的目的是让名为 textBoxText 的节点发生变化,因此它是字符串 _text 的子字符串,直到索引 i,然后是 等到声音文件结束,直到它移动到下一个字符。

目前,声音播放一次,所有文本同时弹出。有问题的音频文件长约 200 毫秒。我将如何使它一遍又一遍地播放相同的文件?我会在 [self runAction:completion:] 的方法调用之外声明 SKAction 吗?有什么想法吗?



Best Answer-推荐答案


您可以通过创建一系列操作来做到这一点。您可能需要进行一些调整。

NSMutableArray *marrActions = [NSMutableArray new];

for (NSUInteger i = 1; i <= _text.length; i++)
{

    [marrActions addObject:[SKAction playSoundFileNamed"regularTextBeep.m4a" waitForCompletion:YES]];
    [marrActions addObject:[SKAction waitForDuration:0.2]];
    [marrActions addObject:[SKAction runBlock:^{
        ((SKLabelNode*)[_scene childNodeWithName"textBoxText"]).text = (NSString*)[_text substringToIndex:i];

        ((SKLabelNode*)[_scene childNodeWithName"textBoxText"]).position = CGPointMake(20 + (((SKLabelNode*)[_scene childNodeWithName"textBoxText"]).frame.size.width / 2.0), ((SKLabelNode*)[_scene childNodeWithName:@"insideOfTextBox"]).frame.size.height - (((SKLabelNode*)[_scene childNodeWithName:@"textBoxText"]).frame.size.height / 2.0) - 15);
        NSLog(@"Textbox loading a letter on iteration %u", i);
    }]];
}

[_scene runAction:[SKAction sequence:marrActions] completion:completion]; //Pass off the completion block here

关于ios - 等待 [SKAction playSoundFileNamed :waitForCompletion:],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29691320/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap