我正在使用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()但仍然没有被销毁。
提前致谢, 大卫雅各布。
答案 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