Не совсем уверен, что я поставил вопрос наилучшим образом, но здесь идет ...
Я играл с HTML5 canvas API и дошел до рисования фигуры на холсте и ее перемещения с помощью клавиш со стрелками.
Затем я попытался переместить различные переменные и функции в шаблон, чтобы можно было создавать несколько фигур (которые в конечном итоге будут управляться разными ключами).
Вот что у меня есть:
function player(x, y, z, colour, speed){
this.lx = x;
this.ly = y;
this.speed = 10;
this.playerSize = z;
this.colour = colour;
}
playerOne = new player(100, 100, 10, "#F0F");
function persona(z, colour){
zone.fillStyle = colour;
offset = 0 - (z / 2);
zone.fillRect(offset, offset, z, z);
}
function move(x, y){
playerOne.lx = playerOne.lx + x;
playerOne.ly = playerOne.ly + y;
zone.clearRect(0, 0, 500, 500);
zone.save();
zone.translate(playerOne.lx, playerOne.ly);
persona(playerOne.playerSize, playerOne.colour);
zone.restore();
}
window.onkeydown = function() {
var direction = this.event.keyCode;
var s = playerOne.speed;
// Arrow Keys
if( direction == 38 && playerOne.ly >= 10){ // Up
move(0,-s);
}
if( direction == 40 && playerOne.ly <= 490){ // Down
move(0,s);
}
if( direction == 37 && playerOne.lx >= 10){ // Left
move(-s,0);
}
if( direction == 39 && playerOne.lx <= 490){ // Right
move(s,0);
}
};
window.onload = function() {
zone = document.getElementById('canvas').getContext('2d');
zone.save();
zone.translate(playerOne.lx, playerOne.ly);
persona(playerOne.playerSize, playerOne.colour);
zone.restore();
};
Итак, я попытался переместить функцию персонажа в шаблон плеера следующим образом:
function player(x, y, z, colour, speed){
this.lx = x;
this.ly = y;
this.speed = 10;
function persona(){
zone.fillStyle = colour;
var offset = 0 - (z / 2);
zone.fillRect(offset, offset, z, z);
}
}
А потом, где прежде, чем сказал
persona(playerOne.playerSize, playerOne.colour);
теперь он просто говорит
playerOne.persona();
Но это просто совершенно не работает, и я не могу понять, почему.
Вероятно, я все делаю неправильно, и я думаю, что проблема в том, что я пытаюсь манипулировать canvas.context (зона вызова в моем скрипте) изнутри объекта / шаблона.
Возможно, это не имеет к этому никакого отношения, и я просто не заявляю, что моя персона функционирует должным образом в контексте шаблона.
Документация по API Canvas очень тонкая на земле, и любой намек в правильном направлении будет очень признателен.