小编Emb*_*ess的帖子

如何检测音效何时完成播放?

我正在使用SimpleAudioEngine,我试图在继续之前检测声音效果是否完成播放.

我正在寻找任何方法,但我试图实现的方法不起作用!

CDSoundEngine *engine = [CDAudioManager sharedManager].soundEngine;    
ALuint soundId = [[SimpleAudioEngine sharedEngine] playEffect:soundId];

float seconds = [engine bufferDurationInSeconds:soundId];
Run Code Online (Sandbox Code Playgroud)

每次我使用bufferDurationInSeconds时,它都会将float值-1返回到变量秒.我检查了实现,当id无效时返回-1,但我100%ID有效!

任何人都可以帮我解决这个问题,或者建议我另一种方法来检测声音效果的结束?

audio objective-c cocos2d-iphone ios simpleaudioengine

9
推荐指数
1
解决办法
1622
查看次数

实例变量是否会限制性能?一个班级应该有两个目的吗?

我有一个有多个实例变量的类.我想在课堂上达到两个目的.我可能只将某些变量用于一个目的,有时可以同时使用这两个变量.

这是一个更具体的例子.我想创建一个类,每次用户点击屏幕时,狗精灵和猫精灵都会出现动画.如果再次点击,他们将继续执行不同的动画.但是,有时我只想让狗精灵出现并更新.还有一些其他罕见的时刻,我希望猫精灵在狗精灵出现之后出现几次.

问题是:实例变量是否分配了太多内存?我非常关心性能,因为我打算制作内存密集型游戏.由于我很难预测何时实际使用所有实例变量,我应该将它们分成两个类吗?让我们划分可能的场景以获得更好的想法.

  1. 只使用Dog Sprite并且cat sprite永远不会出现:如果留在一个类中,则cat的实例变量保持不变.

  2. 狗精灵首先出现,然后猫精灵出现:两个精灵最终都会出现.可以将它分成两个类,但是由于诸如触摸提前逻辑和动画之类的方法是相似的,因此一些方法是重复的.但是如果我们把它留在一次,那么可能会出现情景1,这可能会在没有重复复制很多代码的情况下解决.

其他事情可能会发生,但上面已经讨论过这些问题.从我的角度来看,这些是赞成和反对的:

  1. 一类方法

    • 避免一些重复的逻辑
    • 无需导入导致某些类似实例变量的多个标头

    • 精读

    • 可能会留下一半的实例变量未使用(包括NSString,CCSprite,很多整数和浮点数,CCAnimation,CCLabelBMFont)
  2. 两类方法

    • 更少的实例变量
    • 可能从类继承,而不会在将来继承一些不必要的变量

    • 精读

    • 一些逻辑被复制

我很难决定应该使用哪个选项.任何建议都会很棒!先感谢您!

if (didHelp) 
   for (int x = 0; x < 100; x++)
      NSLog(@"Thanks!");
Run Code Online (Sandbox Code Playgroud)

performance objective-c cocos2d-iphone ios

0
推荐指数
1
解决办法
181
查看次数