SKAction playSoundFileNamed 来自 Singleton

2023-12-11

我有几个级别都使用相同的音效。我没有在每个级别都使用相同的代码,而是将所有声音合并到一个单例类中。但是,当我从其他类运行该方法时,将其放在单例中不会播放声音。我没有任何错误或警告。

当我在每个类中都有相同的代码时,我播放声音没有问题。

问题: Does SKAction playSoundFileNamed从单例调用时不起作用,或者我的代码是否缺少某些内容?

我的单例头文件...

-(void)soundSwordWhoosh;

我的单例方法文件...

@implementation Animations{
    SKAction *swordWhooshSound;
}

-(id)init {
    self = [super init];
    if (self)
    {
        swordWhooshSound = [SKAction playSoundFileNamed:@"SwordWhoosh.mp3" waitForCompletion:YES];
    }
return self;
}

-(void)soundSwordWhoosh {
[self runAction:swordWhooshSound];
}

然后我这样调用该方法:

[_animations soundSwordWhoosh];

您的单例可能不在节点层次结构中(即不是场景的子级或孙级等)。因此您无法对self因为单例实例不会从 Sprite Kit 接收定期更新。

这里也没有必要使用单例,因为您可以使用类方法更轻松地完成同样的事情。您只需传入要播放声音的节点即可。

这是一个辅助类示例:

@interface SoundHelper
+(void) playSwordSoundWithNode:(SKNode*)node;
@end

@implementation SoundHelper
+(void) playSwordSoundWithNode:(SKNode*)node
{
    [node runAction:[SKAction playSoundFileNamed:@"SwordWhoosh.mp3" waitForCompletion:YES]];
}
@end

如果您担心“缓存”操作,那么就不值得这样做。您将做许多其他对性能影响更大的事情。除了 Sprite Kit 在内部创建每个动作的副本之外,无论您创建新动作还是 Sprite Kit 副本,它都不会有太大变化。你仍然可以将其缓存在static变量,如果你愿意的话。

您可以从任何节点和任何方法调用帮助器方法(不要忘记#import "SoundHelper.h"):

-(void) someNodeMethod
{
    [SoundHelper playSwordSoundWithNode:self];
}

PS:您不应该使用 .mp3 文件来制作音效,因为它的效率非常低。 iOS硬件在硬件上一次只能解码一张mp3,其余的由CPU完成。更适合短音效的格式是 .caf 和 .wav。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SKAction playSoundFileNamed 来自 Singleton 的相关文章

  • 如何异步加载场景以便获得加载屏幕?

    我的场景加载可能需要一段时间 并且我希望能够显示加载动画 但是 一切都锁定了 有没有办法异步加载下一个场景并在准备好时获取回调 您可以使用以下命令安排并发执行块异步调度 https developer apple com library m
  • 在 Swift 中创建线性重力场

    Swift 中似乎已弃用矢量方法的线性重力场 这种新语言中有一堆新的 SKFieldNode 但我似乎找不到一个类似于线性重力的 属性 direction 在 Swift 中甚至不可用 也许可以使用这个通用方法 customFieldWit
  • 如何在 SKSpriteNode 上创建脉冲效果?

    您好 我想了解如何创建视觉脉冲效果 如下面的视频所示 https www youtube com watch v uiHj KZWjpU https www youtube com watch v uiHj KZWjpU 我点击了视频中发布
  • Swift SpriteKit:在 GameScene 中访问 UIViewController 的最佳实践[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我想了解从 GameScene 访问 UIViewController 方法的最佳实践是什么 现在我一直在使用 NSNotificationCe
  • SKPhysicsJoint:接触和碰撞不起作用

    在 IOS7 1 上 使用 SpriteKit 我创建了两个简单的矩形精灵以及相应的物理体 我设置了接触和碰撞位掩码 所有工作都完全符合我的预期 检测到接触并且碰撞防止两个矩形重叠 但是 当我创建 SKPhysicsJointSpring
  • SKScene 中的 Segue 到 UIViewController

    在我的 GameScene swift 文件中 我尝试执行返回到我的菜单视图控制器的操作 如下所示 func returnToMainMenu var vc UIViewController UIViewController vc self
  • 如何在 iOS 11 中使用 scenekit - ARKit 动态创建 3D 对象的注释?

    我正在努力使用创建注释overlaySKScene与此类似的东西 https sketchfab com models 1144d7be20434e8387a2f0e311eca9b1 https sketchfab com models
  • 尝试添加已经有父级错误的 SKNode

    我在尝试运行我的游戏时收到错误 尝试添加已有父节点的 SKNode 如果我将 SKSpriteNode 在本地添加到函数中 它就可以正常运行 但是当我尝试在全球范围内声明它时 我收到了该错误 任何解决此错误的帮助都会很棒 我认为这与self
  • 调用 SKLabelNode 时出现延迟?

    我在从一个版本转换时遇到了轻微延迟 滞后 的问题SKScene到另一个 通过注释掉各种代码 我将其范围缩小到SKLabelNode 我的猜测是 这就是它在调用时加载 缓存字体 这会导致在声明新字体时出现小的延迟 口吃SKScene 有没有其
  • 使用 SKAction colorizeWithColor 使 SKSpriteNode 闪烁白色

    好的 我有一个精灵 当被某物击中时应该会闪烁白色 我正在使用这个 SKAction changeColorAction SKAction colorizeWithColor SKColor whiteColor colorBlendFact
  • 如何避免c#中windows窗体的多个实例

    如何避免在 C 中出现多个 Windows 窗体实例 我只想运行该表单的一个实例 因为有机会从我的申请的许多页面打开相同的表格 是的 它有单例模式 创建单例对象的代码 public partial class Form2 Form priv
  • 使用 CGPathContainsPoint SWIFT 时遇到的问题

    我需要检查 CGPoint 是否位于 SKSpriteNode 内 经过一番研究后 CGPathContainsPoint 似乎适合我的目的 if CGPathContainsPoint my sprite path nil my poin
  • 绑定到 Singleton 类 Observable 集合成员

    我似乎无法弄清楚这一点 我在这里发现了一些类似的问题 但要么我无法找出我的方法的正确方向 要么我正在做一些完全错误的事情 我的应用程序有一个单例类记录器 它保存程序中每个类的日志消息 public class Logger private
  • 在 Actionscript 3 中实现单例模式类的最佳方法是什么?

    由于 AS3 不允许私有构造函数 因此构造单例并保证构造函数不是通过 new 显式创建的唯一方法是传递单个参数并检查它 我听说过两个建议 一个是检查调用者并确保它是静态 getInstance 另一个是在同一包命名空间中拥有一个私有 内部类
  • 是否可以将继承应用于 Singleton 类?

    今天面试时遇到一个问题 是否可以在单例类上应用继承概念 我说过 由于构造函数是私有的 因此我们无法扩展该 Singleton 类 他问我的下一件事是在该 Singleton 类上应用继承 因此 我将单例的构造函数设置为受保护的 认为孩子的构
  • 为什么 CGPath 和 UIBezierPath 在 SpriteKit 中对“顺时针”的定义不同?

    在 SpriteKit 中 clockwise方向相反UIBezierPath但不是为了CGPath 例如 如果我有 do let path CGPathCreateMutable CGPathAddArc path nil 0 0 10
  • Windows Azure - 无单点故障的领导者实例

    我正在寻找一种在多个辅助角色实例上拥有 单例 模块的方法 我希望在 Azure 中拥有一个带有队列和多个辅助角色的并行执行模型 这个想法是希望有一个 主 实例 也就是说检查新数据 并通过将其添加到队列来调度它 处理来自特殊队列的所有消息 该
  • 在实现接口的类上强制使用单例模式

    我最好用一个例子来解释这个问题 我有一个接口模型可用于访问数据 模型可以有不同的实现 可以以各种格式表示数据 例如 XMl txt 格式等 Model不关心格式 可以说这样的一个实现是myxml模型 现在我想强迫myxml模型以及其他所有实
  • 外部类与单例类

    假设我们使用 extern 关键字有一些外部链接 我有 在class1 cpp中 MyClass myClassVar NULL 构造函数初始化上述内容 析构函数删除 然后在class2 cpp和class3 cpp中有 extern My
  • 我可以通过在 Android Activity 中声明适当的成员“静态”来提高效率吗

    如果一个 Activity 在实践中是单例 我认为我可以通过声明适当的成员 静态 来获得一些效率 且风险为零 是的 The Android 文档说 http developer android com guide topics fundam

随机推荐

  • 为什么我可以在“res.send”之后执行代码?

    我想知道以下代码行为背后的机制是什么 res send 200 data test data console log still here 我的理解是res send不return该功能 但确实关闭连接 结束请求 这可以解释为什么我仍然可以
  • 无权执行 sts:AssumeRoleWithWebIdentity AWS s3 Cognito 身份验证失败

    我有一个简单的 iOS 应用程序 可以上传到 s3 我正在尝试各种 unauth 尽管理想情况下我想做 Facebook 2 个 IAM 角色 使用向导创建 IAM 身份验证策略 对于 unauth 角色 Version 2012 10 1
  • jQuery 根据选择选项保持显示隐藏状态

    我根据下拉列表中选择的选项下拉选择并显示隐藏其他字段 在 div 内 此代码工作正常并根据选择显示隐藏 但当我加载页面时 所有字段都是可见的 其他事情是 例如 如果我想在选择选项 2 的情况下显示字段并将该选项保存到数据库 并且在重新加载页
  • Powershell .替换正则表达式

    用于替换的正则表达式让我大吃一惊 我正在尝试寻找 值 COM8 gt 在文本文件中并将 COM8 替换为另一个 com 端口 即 COM9 COM13 等 Get Content C Path File config Replace COM
  • 获取列中最常见的 10 个名称

    我一直在努力想出一个能够提取列中出现频率最高的 10 个名称并将它们存储到数组中以供进一步使用的程序 将列的值收集到数组中以加快处理速度 转移到字典的键 频率作为每个键的项目 工作表的 Large 可以轻松找到第 10 大频率 删除任何频率
  • 创建单元测试用例时 PHPUnit 错误

    我有控制器类 UserController 在控制器文件夹中 扩展BaseController 存在于应用程序文件夹中 当我右键单击并选择选项时 Create PHPUnitTests 它给了我以下错误 phpunit Fatal erro
  • 如何检查 @patched-out python 方法是否被调用而不改变其行为?

    我一直在使用Pythonmock我的测试用例的模块 我经常用以下内容装饰我的测试用例 patch my method 装饰师 然后在测试用例的主体中 我设置了 return value属性或 side effect修补方法上的属性来模拟其行
  • 为什么 document.GetElementById 返回 null [重复]

    这个问题在这里已经有答案了 我一直在使用document GetElementById 成功了 但从一段时间开始我就无法让它再次工作了 看下面的代码 div div
  • 从 JavaScript 中的图像读取像素数据会返回半透明像素的意外结果

    我正在 JavaScript 中从 png 文件读取 RGBA 数据 为此 我在画布上绘制图像并使用 getImageData 数据与我的预期不同 测试图像 https raw githubusercontent com FlorianLu
  • “无法获取文档,因为客户端处于离线状态”Firestore 模拟器出现 Firebase 错误

    编辑 我知道这是模拟器的问题 因为没有模拟器它也能正常工作 我正在关注一个Next js 课程我正在使用 Firebase 模拟器 它建议这样做 但没有教程 因为它非常简单 并且我正在尝试为用户从 firestore 读取一些数据 但它总是
  • iOS 中的 Opengl ES 1.x 发光效果

    我目前正在开发一款 iOS 游戏 现在我想要的是一个用opengl绘制任意发光和半透明椭圆的函数 这有点棘手 因为我使用的是 cocos2d 1 1 它不支持 opengl es 2 0 所以没有着色器 这是我所做的 首先是绘制挤出线的函数
  • 意外的无符号整数行为

    我在以下代码中遇到了这种意外的输出 其中我正在验证当所有位都设置为 1 时 short 和 int 类型的无符号形式的最大值 以十进制形式表示 include
  • TypeError: __array__() 采用 1 个位置参数,但给出了 2 个(图像分类 Keras)

    如何解决这个问题 我尝试过设置dtype None in the image img to array method import tensorflow as tf from tensorflow import keras from ten
  • 如何将曲面拟合到一组数据点并获得曲面方程

    乌班图 ROS 思维 Python程序 我正在尝试获取适合点云数据中的一组点的表面方程 数据来自激光雷达扫描仪 我在 rviz 中选择整个扫描的一部分 并获得该选择的坐标选定表面的图片 所选曲面并不总是如此线性 因为材质中可能存在轻微的曲线
  • 响应式方块网格

    我想知道如何创建一个布局响应方块 每个方格都会有垂直和水平对齐内容 具体示例如下 新解决方案 2022 自从写完这个答案以来 CSS 已经发生了变化 我们现在有几个属性可以大大简化方形网格的代码 The grid属性来处理网格布局 MDN
  • 调用Service的onDestroy()

    我想打电话 onDestroy android中的Service方法 我已经在互联网上搜索了很多 很多答案都像是如果 服务强制停止或以某种方式它的 onDestroy 将永远不会调用 但我真的需要知道服务何时停止 我的项目是关于音乐播放器的
  • 检查元素在 DOM 中是否可见

    有什么方法可以检查元素在纯 JS 无 jQuery 中是否可见 那么 给定一个 DOM 元素 我如何检查它是否可见 我试过 window getComputedStyle my element display 但它似乎不起作用 我想知道我应
  • 手机锁定时如何显示弹出活动或对话框?

    我试图在手机锁定时显示活动或对话框 我尝试过使用 WakeLock 但它不起作用 并且只有在手机解锁后我才能看到活动 执行此操作的正确方法是什么 要在不关闭键盘保护的情况下显示活动 请尝试以下操作 getWindow addFlags Wi
  • 设置 ProGuard 来混淆局部变量和参数

    我似乎找不到在被混淆的类的方法内部混淆局部变量的设置 这是我反编译的一个类的摘录 其中有一些明显缺失的部分 理想情况下 方法的参数和局部变量也将被混淆 public class eA extends gu private final gt
  • SKAction playSoundFileNamed 来自 Singleton

    我有几个级别都使用相同的音效 我没有在每个级别都使用相同的代码 而是将所有声音合并到一个单例类中 但是 当我从其他类运行该方法时 将其放在单例中不会播放声音 我没有任何错误或警告 当我在每个类中都有相同的代码时 我播放声音没有问题 问题 D