0

我有一个使用 Silverlight 构建的 Windows 手机游戏。在这个游戏中,我想添加 TapJoy。我已经下载了他们最新的 SDK 并按照他们的所有步骤在我的应用程序中集成它。

在游戏中,我使用silverlight作为主框架和Global Media Element来播放连续的背景音乐。我正在使用 (Microsoft.Xna.Framework.Media) (Microsoft.Xna.Framework) 命名空间。使用它们,我使用以下方法来播放连续的背景声音。DispatcherTimer 和 FrameworkDispatcher.Update

现在,当我点击点击欢乐按钮打开他们的优惠时,他们加载正常;但是,当我在优惠中打开视频时,他们向我们显示以下错误“视频无法播放,请重试。”</p>

基于一些研究和研究,我尝试了一些事情,发现,a)我需要将 Media Element 和 DispatcherTimer 设置为空。b)应用程序在后台发送(停用),然后我再次打开它(激活),视频很好。我检查并发现 Media Element 和 DispatcherTimer 已正确设置为 null。

但是,如果我只执行第一步,并且不在后台发送应用程序,则媒体元素和 dispatcherTimer 不会设置为 null。

谁能帮助我并在下面回答我

a) 我在为此做任何事情吗?b)我可以做任何事情,以便当点击欢乐按钮时,我的应用程序会自动发送到后台,因为这可以解决问题。c)我在将值设置为 null 后使用 gc.collect() 但它仍然没有被破坏。

在此先感谢大卫雅各布。

4

1 回答 1

0

我正在努力按照你所说的去做。我个人会以不同的方式设置它,但我稍后会谈到。我的设置与您的描述相似,它适用于 Tapjoy 的视频。

首先,你提到它是一款 Silverlight 游戏,所以我在 VS 2010 的 Silverlight For Windows Phone 模板下新建了一个 Windows Phone 应用程序项目。

设置调度程序:

我在我的项目中添加了以下类(通常称为此 msdn 示例中的 XNAFrameworkDispatcherService.cs:http: //msdn.microsoft.com/en-us/library/ff842408.aspx

public class XNAFrameworkDispatcherService : IApplicationService
{
    private DispatcherTimer frameworkDispatcherTimer;

    public XNAFrameworkDispatcherService()
    {
        this.frameworkDispatcherTimer = new DispatcherTimer();
        this.frameworkDispatcherTimer.Interval = TimeSpan.FromTicks(333333);
        this.frameworkDispatcherTimer.Tick += frameworkDispatcherTimer_Tick;
        FrameworkDispatcher.Update();
    }

    void frameworkDispatcherTimer_Tick(object sender, EventArgs e)
    {
        FrameworkDispatcher.Update();
    }

    void IApplicationService.StartService(ApplicationServiceContext context)
    {
        this.frameworkDispatcherTimer.Start();
    }

    void IApplicationService.StopService()
    {
        this.frameworkDispatcherTimer.Stop();
    }
}

要启动此服务,请确保已将其添加到 App.xaml。将属性添加到指向您的命名空间的 Application 元素,如下所示:

xmlns:s="clr-namespace:WindowsPhoneApplication;assembly=WindowsPhoneApplication">

然后在您的块中添加以下内容:

<s:XNAFrameworkDispatcherService />

播放音乐:

现在关于播放循环音乐文件。在 MainPage.xaml.cs 中,我使用 Microsoft.Xna.Framework.Media.MediaPlayer 设置了 Microsoft.Xna.Framework.Media.Song 以在页面导航到时循环。

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    base.OnNavigatedTo(e);

    Tapjoy.TapjoyConnect.Instance.RequestTapjoyConnect("your-app-id", "your-secret-key");

    try
    {
        Song song = Song.FromUri("example", new Uri("/example.wma", UriKind.Relative));
        MediaPlayer.IsRepeating = true;
        MediaPlayer.Play(song);
    }
    catch (Exception)
    {
        System.Diagnostics.Debug.WriteLine("Can't load sound");
    }
}

当页面离开时,我还将它设置为停止播放音乐。

protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
    base.OnNavigatedFrom(e);

    MediaPlayer.Stop();
}

然后我创建了一个按钮来启动 Tapjoy 优惠墙。

private void button1_Click(object sender, RoutedEventArgs e)
{
    Tapjoy.TapjoyConnect.Instance.ShowOffers();
}

概括:

现在发生的情况是,当您的应用程序启动时,它会启动以大约 30 fps 的速度滴答作响的 XNAFrameworkDispatcherService。这将为您发送 XNA 框架队列中的消息。这仅在使用来自 XNA 的音频/媒体服务的 silverlight 应用程序中需要。

当导航到 MainPage 时,您使用 Connect 调用 ping Tapjoy,然后加载您的歌曲以循环播放。

正常的游戏现在可以进行了,当点击 Show Offers 按钮时,Tapjoy 将离开您的页面,导致从事件导航到触发,并且 MediaPlayer 将停止您的歌曲。

游戏创意:

您可能要考虑创建一个新项目并使用“Windows Phone Silverlight 和 XNA 应用程序”选项。VS2010 将创建一个已设置内容管理器的空白项目,因此您可以使用 XNA 管道使用声音和图像,我发现这更容易。

祝你好运,记住 Tapjoy 也为这些问题提供支持。只需发送电子邮件至 support@tapjoy.com,或使用 Tapjoy 开发人员组:https ://groups.google.com/group/tapjoy-developer?hl=en

于 2012-06-02T18:51:13.450 回答