Я пытаюсь сделать игру для Windows 8 с помощью HTML/Javascript и WinJS, и в настоящее время у меня возникают проблемы с «прототипами», которые ведут себя статически, когда я их не хочу. Я никогда не использовал 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 (а не в статических членах), и использование этого.lastPosition делает это очевидным.
Почему это не так, как я ожидал, и что я делаю неправильно? Большое спасибо
Вы можете попытаться объявить в явной форме lastPosition к нулю? Поэтому в конструкторе добавьте this.lastPosition = null. –
Просто выдает ошибку «невозможно установить свойство x неопределенной». Если я использую «обычные» свойства (positionX, positionY, lastPositionX, lastPositionY), все работает нормально. Я предполагаю, что определение позиции как литерала объекта, вместо того, чтобы делать что-то вроде новых Coords (x, y, r), является проблемой на данный момент, но, похоже, сложно определить класс только для пары координат. – Fourjays
А, так это должно работать, когда вы добавляете this.lastPosition = {x: 0, y: 0, r: 0} в конструктор? –