Почему я получаю рамку вокруг мигающих символов?

#javascript #canvas

Вопрос:

Я сделал один экран, имитирующий классический экран Commodore 64. Я получаю границу вокруг мигающих символов. Как я мог промолчать об этом? Я еще не определил ни одного.

 <script>
    ctx.font = "21px Commodore64Angled";
    ctx.fillStyle = foreground1;
    for (var i = 0; i < chars[0].length; i  ) {
        ctx.fillText(chars[0].substr(i, 1).toUpperCase(), xCharCnt * 4   xCharCnt * i, yCharCnt * 4   (0   1) * 2 * yCharCnt - 2);
    }
    ctx.fillStyle = foreground2;
    for (var j = 1; j < 8; j  ) {
        for (var i = 0; i < chars[j].length; i  )
        ctx.fillText(chars[j].substr(i, 1).toUpperCase(), xCharCnt * 4   xCharCnt * i, yCharCnt * 4   (j   1) * 2 * yCharCnt - 2);
    }
    ctx.fillStyle = foreground1;
    for (var j = 8; j < 11; j  ) {
        for (var i = 0; i < chars[j].length; i  )
        ctx.fillText(chars[j].substr(i, 1).toUpperCase(), xCharCnt * 4   xCharCnt * i, yCharCnt * 4   (j   1) * 2 * yCharCnt - 2);
    }
    ctx.fillStyle = foreground3;
    for (var i = 0; i < chars[11].length; i  ) {
        ctx.fillText(chars[11].substr(i, 1).toUpperCase(), xCharCnt * 4   xCharCnt * i, yCharCnt * 4   (j   1) * 2 * yCharCnt - 2);
    }
    // Zum Blinken bringen
    var backgr = background;
    var foregr = foreground3;
    setInterval(function() {
        if (foregr == foreground3) {
            backgr = foreground2;
            foregr = background;
        }
        else {
            backgr = background;
            foregr = foreground3;
        }
        ctx.fillStyle = backgr;
        ctx.fillRect(xCharCnt * (4   5)   1, yCharCnt * 28 - yCharCnt - 1, xCharCnt * 29, yCharCnt);
        for (var i = 0; i < chars[11].length; i  ) {
            ctx.fillStyle = foregr;
            ctx.fillText(chars[11].substr(i, 1).toUpperCase(), xCharCnt * 4   xCharCnt * i, yCharCnt * 4   (j   1) * 2 * yCharCnt - 2);
        }
    }, 300);
</script>
 

Взгляните на:

 ctx.fillRect(xCharCnt * (4   5)   1, yCharCnt * 27 - 1, xCharCnt * 29, yCharCnt);
 

Я был бы благодарен за любую идею. 🙂

Комментарии:

1. Примечание: Я хотел бы представить вам кучу кода, чтобы вы могли легко проверить его в своем браузере, но stackoverflow не позволил мне, сказав, что это будет слишком много кода по сравнению с моим объяснением. 🙁

Ответ №1:

Я нашел решение самостоятельно: я установил визуализацию в их соответствующую конструкцию if и определил, чтобы отображать на один пиксель больше в каждом направлении, чтобы черные границы, которые у меня есть, были переписаны. Вот результат:

 ctx.fillRect(xCharCnt * (4   5)   1 - 1, yCharCnt * 27 - 1 - 1, xCharCnt * 29   2, yCharCnt   2);