0

我正在尝试使用 HTML/Javascript 和 WinJS 为 Windows 8 制作游戏,并且目前在我不希望它们静态行为时遇到“原型”问题。我从来没有在这种程度上使用过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 实例,每个实例都有一组不同的 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 回答