Выразительный JavaScript (Хавербеке) - страница 159
> table.style.width = this.level.width * scale + "px";
> this.level.grid.forEach(function(row) {
> var rowElt = table.appendChild(elt("tr"));
> rowElt.style.height = scale + "px";
> row.forEach(function(type) {
> rowElt.appendChild(elt("td", type));
> });
> });
> return table;
>};
Как мы уже упоминали, фон рисуется через элемент Некоторые из настроек ( Правило Каждый актёр рисуется созданием элемента DOM и заданием позиции и размера, основываясь на свойства актёра. Значения надо умножать на масштаб Чтобы задать элементу больше одного класса, мы разделяем их имена пробелами. В коде CSS класс >
. Это удобно соответствует тому факту, что уровень задан в виде решётки – каждый ряд решётки превращается в ряд таблицы (элемент
>
). Строки решётки используются как имена классов ячеек таблицы ( >
). Следующий CSS приводит фон к необходимому нам внешнему виду: >.background { background: rgb(52, 166, 251);
> table-layout: fixed;
> border-spacing: 0; }
>.background td { padding: 0; }
>.lava { background: rgb(255, 100, 100); }
>.wall { background: white; }
>table-layout
, >border-spacing
и >padding
) используются для подавления нежелательного поведения по умолчанию. Не нужно, чтобы вид таблицы зависел от содержимого ячеек, и не нужны пробелы между ячейками или отступы внутри них.>background
задаёт цвет фона. CSS разрешает задавать цвета словами (>white
) и в формате >rgb(R, G, B)
, где красная, зелёная и синяя компоненты разделены на три числа от 0 до 255. То есть, в записи >rgb(52, 166, 251)
красный компонент равен 52, зелёный 166 и синий 251. Поскольку синий компонент самый большой, результирующий цвет будет синеватым. Вы можете видеть, что самый большой компонент в правиле >.lava
– красный.>scale
, чтобы переходить от единиц игры к пикселям.>DOMDisplay.prototype.drawActors = function() {
> var wrap = elt("div");
> this.level.actors.forEach(function(actor) {
> var rect = wrap.appendChild(elt("div",
> "actor " + actor.type));
> rect.style.width = actor.size.x * scale + "px";
> rect.style.height = actor.size.y * scale + "px";
> rect.style.left = actor.pos.x * scale + "px";
> rect.style.top = actor.pos.y * scale + "px";
> });
> return wrap;
>};
>actor
задаёт позицию >absolute
. Имя типа используется в дополнительном классе для задания цвета. Нам не надо заново определять класс >lava
, потому что мы повторно используем класс для лавы из решётки, который мы определили ранее.