0

我正在尝试创建一个新类FadableSoundEffectInstance,它继承自SoundEffectInstance.

我的FadableSoundEffectInsance意志可以SoundEffectInstances很容易地淡入淡出,但是在完成课程后,我在这里得到了这个可爱的错误:

The type 'Microsoft.Xna.Framework.Audio.SoundEffectInstance' has no constructors defined

经过一段时间的研究和深入研究 XNA 源代码后,我发现了这一点。

internal SoundEffectInstance(SoundEffect parentEffect, bool fireAndForget)
{
...
}

所以它确实有一个构造函数,但我无法访问它。

我该如何解决这个问题才能创建我的课程?

请注意,以前没有使用过 XNA 的人,不要创建新类,blah = new SoundEffectInstance而是加载 aSoundEffect并使用方法CreateInstance()。另外,SoundEffect是密封类。此外,向我的新类添加构造函数将引发相同的错误,但SoundEffectInstance相反。

这是我的相关代码,以防您需要深入了解

FadableSoundEffectInstance

    public sealed class FadableSoundEffectInstance : SoundEffectInstance
    {
        public float FadeSpeed = .01f;
        public AudioFadeState FadeState = AudioFadeState.Normal;

        public void FadeOut()
        {
            //Logic
        }
        public void FadeIn()
        {
            //Logic
        }
        public void Update(GameTime gameTime)
        {
            //Logic
        }
    }

还有一个扩展方法,所以我可以调用SoundEffect.CreateFadableInstance()

    public static FadableSoundEffectInstance CreateFadableInstance(this SoundEffect soundEffect)
    {
        return (FadableSoundEffectInstance)soundEffect.CreateInstance();
    }
4

2 回答 2

0

你的问题不是唯一的。
您无权访问构造函数,因此无法创建派生类。无论您是否使用 XNA,这都是一样的。

如果你想直接使用你的新音效,你可以创建一个伪装饰器,它接收实际SoundEffectInstance并包装它。

但是,如果您想将声音效果传递给需要SoundEffectInstance.

于 2013-07-11T14:52:39.377 回答
0

我通过向SoundEffectInstance类添加 a 而不是继承它来解决这个问题,它可能不是最优雅的解决方案,但它确实有效。

public SoundEffectInstance BaseInstance;

并将我的扩展方法更改为:

    public static FadableSoundEffectInstance CreateFadableInstance(this SoundEffect soundEffect)
    {
        return new FadableSoundEffectInstance(soundEffect);
    }

我的班级负责处理音效,将其转换为SoundEffectInstance,并进行班级可能需要的任何初始化

    public FadableSoundEffectInstance(SoundEffect soundEffect, float fadeSpeed = .1f)
    {
        BaseInstance = soundEffect.CreateInstance();
        BaseInstance.Volume = 0;
        FadeSpeed = fadeSpeed;
    }
于 2013-07-11T15:11:47.917 回答