1

Steamゲームのランチャーとして機能するwinJSアプリがあります。実行していないときでも5つの画像を循環させたいのですが。

小さなタイルのみを使用します—このアプリの広いタイルの画像はありません。

コードは次のとおりです。

(function () {
"use strict";

WinJS.Namespace.define("Steam", {
    launch: function launch(url) {
        var uri = new Windows.Foundation.Uri(url);

        Windows.System.Launcher.launchUriAsync(uri).then(
             function (success) {
                 if (success) {
                     // File launched
                     window.close();
                 } else {
                     // File launch failed
                 }
             }
        );
    }
});

WinJS.Namespace.define("Tile", { 
    enqueue: function initialize() {
        var updaterHandle = Windows.UI.Notifications.TileUpdateManager.createTileUpdaterForApplication();
        updaterHandle.enableNotificationQueue(true);
        return updaterHandle;
    },
    update: function update () {
        var template = Windows.UI.Notifications.TileTemplateType.tileSquareImage;
        var tileXml = Windows.UI.Notifications.TileUpdateManager.getTemplateContent(template);

        var randIndx = Math.floor(Math.random() * 5);
        var randUpdatetime = 1000 * 3 * (((randIndx == 0) ? 1 : 0) + 1); // let the base image stay longer

        var tileImageAttributes = tileXml.getElementsByTagName("image");

        tileImageAttributes[0].setAttribute("src", "ms-appx:///images/Borderlands2/borderlands_2_" + randIndx + "_sidyseven.png");
        tileImageAttributes[0].setAttribute("alt", "Borderlands 2");

        var tileNotification = new Windows.UI.Notifications.TileNotification(tileXml);
        var currentTime = new Date();

        tileNotification.expirationTime = new Date(currentTime.getTime() + randUpdatetime);
        tileNotification.tag = "newTile";

        var updater = Tile.enqueue();
        updater.update(tileNotification);

        setTimeout('Tile.update();', randUpdatetime);
    }
});


WinJS.Binding.optimizeBindingReferences = true;

var app = WinJS.Application;
var activation = Windows.ApplicationModel.Activation;

app.onactivated = function (args) {
    if (args.detail.kind === activation.ActivationKind.launch) {                 
        setTimeout('Steam.launch("steam://rungameid/49520");', 800);
        args.setPromise(WinJS.UI.processAll().then(function () {
            return WinJS.Navigation.navigate("/default.html", args).then(function () {
                Tile.update();
            });
        }));
    }
};

app.start();
})();

ノート:

  • コードは現在、イメージを循環させません。代わりに、明らかに変更されないか、起動後にアプリケーション名のテキストをデフォルトイメージの小さなビューに置き換えます。これはしばらくするとテキストに戻り、サイクルが繰り返される場合があります。別の画像が表示されることはありません(誤って表示される小さな画像でも、メインタイルでも)。

  • デバッグで実行し、 TileUpdater.update(TileNotification)ステージでブレークポイントを設定すると、コンソールで、imagesrc属性が希望どおりにランダムなイメージに設定されていることを確認できます。

    >>>>tileNotification.content.getElementsByTagName("image")[0].getAttribute("src")

    "ms-appx:///images/Borderlands2/borderlands_2_4_sidyseven.png"

    しかし、これが実際にタイルに表示されることはありません。

  • これらのイメージファイルはソリューションに含まれており、ソリューションエクスプローラーの適切なディレクトリに表示されます。

4

1 に答える 1

0

イメージの src 属性がデバッグで適切に設定されている場合、イメージに適切な「ビルド アクション」がない可能性があります。

各イメージの「プロパティ」で、「ビルド アクション」を「リソース」に設定します。

ここに画像の説明を入力

于 2012-11-26T17:58:42.917 に答える