Я смущен, как определять и вызывать методы объекта JavaScript. Я пытаюсь создать игру в JavaScript и хочу создавать объекты с функциями для управления каждым элементом. В настоящее время функция game.update
вызывает ошибку при попытке вызвать player.update
. Он не может найти метод. Как мне обратиться к методам определения и вызова. Я исхожу от использования java.Вызов функций объекта
//INIT
var game;
var paper;
var key = [0, 0, 0, 0, 0]; // left, right, up, down
window.onload = function() {
paper = Raphael("canvas", 640, 480);
game = new Game();
game.init();
};
//GAME
function Game() {
this.player = new Player();
this.score = 0;
this.drawCanvas = function() {
paper.clear();
paper.rect(0, 0, 640, 480, 10).attr({
fill: "#fff",
stroke: "none"
});
paper.text(40, 10, "Score " + this.score);
paper.ellipse(this.player.positionX, this.player.positionY, 10, 10);
}
this.update = function() {
this.player.update.call();
this.drawCanvas.call()();
}
this.init = function() {
this.drawCanvas();
setInterval(this.update, 35);
}
}
//UNITS
//PLAYER
function Player() {
this.positionX = 100;
this.positionY = 100;
this.update = function() {
if (key[0]) { //left
this.positionX -= 3;
game.score += 3;
}
if (key[1]) { //right
this.positionX += 3;
game.score += 3;
}
if (key[2]) { //up
this.positionY -= 3;
game.score += 3;
}
if (key[3]) { //down
this.positionY += 3;
game.score += 3;
}
if (key[4]) { //space
}
if (this.positionX > 640) {
this.positionX = 640;
} else if (this.positionX < 0) {
this.positionX = 0;
} else if (this.positionY > 480) {
this.positionY = 480;
} else if (this.positionY < 0) {
this.positionY = 0;
}
}
}
function changeKey(which, to) {
switch (which) {
case 65:
case 37:
key[0] = to;
break; // left
case 87:
case 38:
key[2] = to;
break; // up
case 68:
case 39:
key[1] = to;
break; // right
case 83:
case 40:
key[3] = to;
break; // down
case 32:
key[4] = to;
break; // space bar;
case 17:
key[5] = to;
break; // ctrl
}
}
document.onkeydown = function (e) {
changeKey((e || window.event).keyCode, 1);
};
document.onkeyup = function (e) {
changeKey((e || window.event).keyCode, 0);
};
Я получаю следующее сообщение об ошибке:
Uncaught TypeError: Cannot read property 'update' of undefined main.js:25
Спасибо, что исправил это. Однако теперь я получаю «Uncaught TypeError: Не могу прочитать свойство« positionX »неопределенного» в строке 21. Но я посмотрю на это. –
Возможно, потому, что вы не передаете значение 'this' для' .call() '. Первый аргумент, который вы ему даете, должен быть тем, что вы хотите установить как его значение this. Если вам не нужно специальное значение this this, то просто сделайте 'this.player.update();' –
... и это тоже неверно ;-) 'this.drawCanvas.call()(); ' –