tapjoy问题与视频播放

时间:2012-06-01 07:15:03

标签: windows-phone-7.1.1 tapjoy

我正在使用Silverlight构建一款Windows手机游戏。在这个游戏中,我想添加TapJoy。我已经下载了他们最新的SDK,并按照他们的所有步骤在我的应用程序中对其进行了调查。

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

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

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

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

任何人都可以帮助我并按照

回答我

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

提前致谢, 大卫雅各布。

1 个答案:

答案 0 :(得分: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();
}

要点:

现在发生的事情是,当你的应用程序启动时,它会启动大约30fps的XNAFrameworkDispatcherService。这将为您分派XNA Framework Queue中的消息。只有在使用XNA的音频/媒体服务的Silverlight应用程序中才需要这样做。

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

正常的游戏玩法现在可以进行,当点击“显示优惠”按钮时,Tapjoy将离开您的页面,导致从事件导航到触发,MediaPlayer将停止您的歌曲。

您的游戏理念:

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

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