0

HTML /JavascriptとWinJSを使用してWindows8用のゲームを作成しようとしていますが、現在、「プロトタイプ」が静的に動作したくないときに問題が発生しています。私はこれほどJavascriptを使用したことがないか、非常に多くのオブジェクトが関係しているので、おそらくばかげた単純なエラーを犯しましたが、何が理解できません。

最初にここにいくつかのコードがあります(それは長いクラスです)私が話しているのは:

(function () {
    "use strict";

    WinJS.Namespace.define("Race", {
        Car: WinJS.Class.derive(
            Race.Common,
            //Constructor method.
            function (slotNum, slotData, canvas, stage, preload, pixelScale) {
                this.canvas = canvas;
                this.stage = stage;
                this.preload = preload;
                this.pixelScale = pixelScale;

                this.slotNum = slotNum;
                this.slotData = slotData;
            },
            //Instance properties and methods.
            {
                /** Properties **/
                slotNum: 0,
                slotData: {},
                position: { x: 0, y: 0, r: 0 },
                lastPosition: { x: 0, y: 0, r: 0 },

                /**Methods **/
                /**
                 *
                 */
                calcRotation: function () {
                    //get angle between last position and current position

                    this.lastPosition.r = this.position.r;
                    this.position.r = this.getAngle(this.lastPosition.x, this.lastPosition.y, this.position.x, this.position.y);
                },
            },
            //Static properties and methods.
            {
                //Debug properties.
                showDebug: true,
                debugCarColors: ['red', 'yellow', 'blue', 'green'],
            }
        )
    });
}());

したがって、Race.Carには4つのインスタンスがあり、それぞれに異なるslotDataのセットがあります。これは正常に機能します。各インスタンスには、独自のslotDataのセットと独自のslotNumがあります。ブレークポイントを使用してこれを確認できます(車を循環するため、slotDataは各インスタンスに固有です)。私はこれまで位置だけを扱ってきたので、それも正しく機能しているように見えます。

しかし、私が問題を抱えているのはlastPositionです。これは、この車のlastPositionではなく、最後の車のlastPositionに設定されています。WinJS.Class.defineの「インスタンスメンバー」セクション(静的メンバーではなく)で定義することを考えていたでしょう。this.lastPositionを使用すると、これが明らかになります。

なぜ期待どおりに動作しないのですか、何が間違っているのですか?どうもありがとう

4

1 に答える 1

1

オブジェクトをインスタンス化するときは、次のように、コンストラクターのデフォルトとしてオブジェクトを追加してみてください。

function (slotNum, slotData, canvas, stage, preload, pixelScale) {
            this.canvas = canvas;
            this.stage = stage;
            this.preload = preload;
            this.pixelScale = pixelScale;

            this.slotNum = slotNum;
            this.slotData = slotData;
            this.lastPosition = { x: 0, y: 0, r: 0 };
        },

乾杯 :-)

于 2013-02-25T11:42:17.777 に答える