首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从内部SoundEffectInstance继承,未定义构造函数

从内部SoundEffectInstance继承,未定义构造函数
EN

Stack Overflow用户
提问于 2013-07-11 22:39:57
回答 2查看 205关注 0票数 0

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

我的FadableSoundEffectInsance将允许SoundEffectInstances很容易地淡入和淡出,然而在完成课程后,我得到了这个可爱的错误:

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

经过一段时间的研究和对XNA源代码的挖掘,我发现了这一点。

代码语言:javascript
复制
internal SoundEffectInstance(SoundEffect parentEffect, bool fireAndForget)
{
...
}

所以它确实有一个构造函数,但是我不能访问它。

我如何解决这个问题才能创建我的类呢?

注对于以前没有使用过XNA的人来说,您不需要使用blah = new SoundEffectInstance创建新类,而是加载一个SoundEffect并使用CreateInstance()方法。此外,SoundEffect是一个密封的类。此外,向我的新类添加构造函数将抛出相同的错误,但对于SoundEffectInstance

以下是我的相关代码,以防您需要深入查看

FadableSoundEffectInstance

代码语言:javascript
复制
    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()

代码语言:javascript
复制
    public static FadableSoundEffectInstance CreateFadableInstance(this SoundEffect soundEffect)
    {
        return (FadableSoundEffectInstance)soundEffect.CreateInstance();
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-11 23:11:48

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

代码语言:javascript
复制
public SoundEffectInstance BaseInstance;

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

代码语言:javascript
复制
    public static FadableSoundEffectInstance CreateFadableInstance(this SoundEffect soundEffect)
    {
        return new FadableSoundEffectInstance(soundEffect);
    }

和我的类来处理声音效果,将其转换为SoundEffectInstance,并执行该类可能需要的任何初始化

代码语言:javascript
复制
    public FadableSoundEffectInstance(SoundEffect soundEffect, float fadeSpeed = .1f)
    {
        BaseInstance = soundEffect.CreateInstance();
        BaseInstance.Volume = 0;
        FadeSpeed = fadeSpeed;
    }
票数 0
EN

Stack Overflow用户

发布于 2013-07-11 22:52:39

你的问题并不是唯一的。

您没有访问构造函数的权限,因此不能创建派生类。无论您是否使用XNA,这都是相同的。

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

但是,如果您希望将声音效果传递给需要SoundEffectInstance的XNA方法,这对您没有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17596362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档