我正在尝试使用 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 的使用使这一点显而易见。
为什么它的行为不像我预期的那样,我做错了什么?非常感谢