У вас было несколько проблем с исходным кодом, в основном из-за неопределенности переменных.Когда вы объявляете переменную, она определяется, только если вы даете ей значение.Это означает, что код, такой как:
var ctx;
Создает переменную с именем ctx
, но ее значение равно undefined
.Это означает, что когда вы попытаетесь сделать что-то вроде
ctx.beginPath();
, вы получите ошибку, потому что undefined
не имеет свойства beginPath
.
Чтобы исправить это, вам нужно инициализировать переменные по мере их объявления.Фактически, редко бывает хорошей идеей определить переменную без ее инициализации.
Я добавил здесь функцию для создания холста, и затем вы можете использовать этот объект холста для инициализации вашей переменной ctx
.Вот как это может выглядеть:
var cwidth = 400;
var cheight = 300;
var dicex = 50;
var dicey = 50;
var dicewidth = 100;
var diceheight = 100;
var dotrad = 6;
function init() {
draw1();
}
function addCanvas(width, height) {
var canvas = document.createElement('canvas');
canvas.width = width;
canvas.height = height;
document.body.appendChild(canvas);
return canvas;
}
function draw1() {
var dotx;
var doty;
var canvas = addCanvas(cwidth, cheight)
var ctx = canvas.getContext("2d");
ctx.beginPath();
dotx = dicex + 0.5 * dicewidth;
doty = dicey + 0.5 * diceheight;
ctx.arc(dotx, doty, dotrad, 0, Math.PI * 2, true);
ctx.closePath();
ctx.fill();
}
init();