0

Silverlight を使用してビルドした Windows Phone ゲームを 1 つ持っています。このゲームでは、TapJoy を追加したいと考えています。最新の SDK をダウンロードし、すべての手順に従って、アプリ内でそれを統合します。

ゲームでは、シルバーライトをメイン フレームワークとして使用し、グローバル メディア エレメントを使用して連続した BGM を再生しています。(Microsoft.Xna.Framework.Media) (Microsoft.Xna.Framework) 名前空間を使用しています。それらを使用して、次の方法を使用して、連続した背景音を再生します。DispatcherTimer と FrameworkDispatcher.Update

今、タップジョイボタンをクリックしてオファーを開くと、正常に読み込まれます。ただし、オファー内でビデオを開くと、「ビデオを再生できません。もう一度お試しください」というエラーが表示されます。</p>

いくつかの調査と研究に基づいて、いくつか試してみたところ、a) Media Element と DispatcherTimer を null に設定する必要があることがわかりました。b) アプリケーションがバックグラウンドで送信され (非アクティブ化)、再度開くと (アクティブ化)、ビデオは問題なく表示されます。確認したところ、Media Element と DispatcherTimer が正しく null に設定されていることがわかりました。

しかし、ステップ 1 のみに従い、アプリをバックグラウンドで送信しない場合、メディア要素とディスパッチャタイマーは 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 Framework キューにあるメッセージがディスパッチされます。これは、XNA からのオーディオ/メディア サービスを使用している Silverlight アプリケーションでのみ必要です。

MainPage に移動したら、Connect 呼び出しで Tapjoy に ping を実行し、Song をロードしてループします。

これで通常のゲームプレイが進行し、Show Offers ボタンがクリックされると、Tapjoy はあなたのページから離れてナビゲートし、イベントからのナビゲートを発生させ、MediaPlayer はあなたの曲を停止します。

ゲームのアイデア:

新しいプロジェクトを作成し、「Windows Phone Silverlight および XNA アプリケーション」オプションを使用することを検討してください。VS2010 は、コンテンツ マネージャーが既にセットアップされた空のプロジェクトを作成するため、XNA パイプラインでサウンドと画像を使用できます。

Tapjoy はこれらの問題にも対応しています。support@tapjoy.com にメールするか、 https ://groups.google.com/group/tapjoy-developer?hl=en の Tapjoy 開発者グループを使用してください。

于 2012-06-02T18:51:13.450 に答える