我正在尝试使用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。这被设置为 last 汽车的lastPosition,而不是此汽车的lastPosition。我想在WinJS.Class.define的“实例成员”部分(而不是静态成员)中定义它,并使用this.lastPosition使这一点显而易见。
为什么它不像我预期的那样表现,我做错了什么? 非常感谢
答案 0 :(得分: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 };
},
干杯: - )