Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.09.2018, 19:35
Аспирант
Отправить личное сообщение для drakulawz Посмотреть профиль Найти все сообщения от drakulawz
 
Регистрация: 13.08.2018
Сообщений: 79

Почему рисуется только один прямоугольник циклом?
Здравствуйте!
Рисую прямоугольники циклом, должно выйти 3 ряда по 3, но получаю один.
Есть вот такой скрипт:

$(document).ready(function () {
    cnv = document.getElementById('canvas');
    ctx = cnv.getContext('2d');
    width = cnv.width;
    height = cnv.height;

    var fillAll = function (color) {
        ctx.fillStyle = '#ccc';
        ctx.fillRect(0, 0, width, height);
    };

    var strkRect = function (x, y, w, h, color) {
        ctx.strokeStyle = color;
        ctx.strokeWidth = 2;
        ctx.strokeRect(x, y, w, h);
    };

    var area = {
        x: 0,
        y: 0,
        width: 100,
        height: 100,
        color: 'white',

        draw: function () {
            strkRect(this.x, this.y, this.width, this.height, this.color);
        },

        init: function (x, y, w, h) {
            this.x = x;
            this.y = y;
            this.width = w;
            this.height = h;
        }
    };

    for (var a1 = 0; a1 < 3; a1++) {
        for (var a2 = 0; a2 < 3; a2++) {
            var dW = Math.ceil(width / 3),
                dY = Math.ceil(height / 3);
            area.init(dW * a1, dY * a2, dW, dY);
        }
    };

    setInterval(function () {
        fillAll();
        area.draw();
    }, 1000 / 60);
});


На странице я вижу только один прямоугольник в конце канваса, как будто бы отрисовало все и стёрло но оставило последний.
Подскажите, может я не правильно цикл применил или не так инициализировать надо? Только прошу, не нужно свои скрипты писать - если возможно. Я их потом не адаптирую, у меня 8 скриптов (файлов) связанных - не хватит мозгов на это. Буду благодарен если кто-нибудь объяснить как правильно делать или в чём ошибка, я уверен, что и сам скрипт смогу написать, по подсказке. Если уж нельзя без примера...

Последний раз редактировалось drakulawz, 28.09.2018 в 19:37.
Ответить с цитированием
  #2 (permalink)  
Старый 28.09.2018, 19:45
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от drakulawz
На странице я вижу только один прямоугольник
... а откуда взять больше одного?
Ответить с цитированием
  #3 (permalink)  
Старый 28.09.2018, 19:51
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от drakulawz
Рисую прямоугольники циклом
нет этого в коде! есть бесконечное рисование последних данных.
Ответить с цитированием
  #4 (permalink)  
Старый 28.09.2018, 19:53
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от drakulawz
как правильно делать
убрать setInterval, а его содержимое добавить в цикл.
Ответить с цитированием
  #5 (permalink)  
Старый 29.09.2018, 11:17
Аспирант
Отправить личное сообщение для drakulawz Посмотреть профиль Найти все сообщения от drakulawz
 
Регистрация: 13.08.2018
Сообщений: 79

Сообщение от рони
убрать setInterval, а его содержимое добавить в цикл.
Понял! Благодарю за помощь! Но я сделал всё же с сетинтервалом, просто вставил цикл вот так:
setInterval(function () {
        fillAll();
        for (var a1 = 0; a1 < 3; a1++) {
        for (var a2 = 0; a2 < 3; a2++) {
            var dW = Math.ceil(width / 3),
                dY = Math.ceil(height / 3);
            area.init(dW * a1, dY * a2, dW, dY);
            area.draw(dW * a1, dY * a2, dW, dY);
            }
    };
    }, 1000 / 60);
Ответить с цитированием
  #6 (permalink)  
Старый 29.09.2018, 11:48
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

drakulawz,
можно узнать для чего вам нужен setInterval в данном случае? зачем нужны строки 1 и 11?
Ответить с цитированием
  #7 (permalink)  
Старый 30.09.2018, 11:02
Аспирант
Отправить личное сообщение для drakulawz Посмотреть профиль Найти все сообщения от drakulawz
 
Регистрация: 13.08.2018
Сообщений: 79

Сообщение от рони
для чего вам нужен setInterval в данном случае
В данном случаи он не нужен, но для работы всей программы без него вообще ничего не будет рисоваться. Я же выложил только ту часть кода с которой у меня проблема. и там не setInterval будет, а вот так:
// файл engine.js:
var _renderer = (function () {
    return requestAnimationFrame || webkitRequestAnimationFrame ||
        mozRequestAnimationFrame ||
        oRequestAnimationFrame ||
        msRequestAnimationFrame;
})();

var _engine = function () {
    console.log('The game loop is not initialized!');
};

var startGame = function (game) {
    if (typeof game == 'function') {
        _engine = game;
    }
    gameLoop();
};

var setGame = function (game) {
    if (typeof game == 'function') {
        _engine = game;
    }
};

var gameLoop = function () {
    _engine();
    _renderer(gameLoop);
};

    // файл со скриптом инициализации всех функций script.js:
    var game = function () {
        fillAll('#ccc');
        for (var a1 = 0; a1 < 3; a1++) {
            for (var a2 = 0; a2 < 3; a2++) {
                var dW = Math.ceil(width / 3),
                    dY = Math.ceil(height / 3);
                area.init(dW * a1, dY * a2, dW, dY);
                area.draw(dW * a1, dY * a2, dW, dY);
            }
        };
        target.draw();
        player.move();
        player.draw();
    };

    var menu = function () {
        fillAll('#ccc');
        for (var a1 = 0; a1 < 3; a1++) {
            for (var a2 = 0; a2 < 3; a2++) {
                var dW = Math.ceil(width / 3),
                    dY = Math.ceil(height / 3);
                area.init(dW * a1, dY * a2, dW, dY);
                area.draw(dW * a1, dY * a2, dW, dY);
            }
        };
        player.draw();
        if (isAnyKeyDown()) {
            setGame(game);
        }
    };

    startGame(menu);


Если можно как-то проще сделать то буду рад увидеть это.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как только подключаю store таблица Grid - не рисуется.(? JSTalker ExtJS 2 27.06.2010 19:45
Окно открывается только один раз altermann ExtJS 8 22.04.2010 11:55
Выделить группу чекбоксов. В группе может быть только один чекбокс. JooZ Элементы интерфейса 2 23.12.2009 19:28
загрузка данных из XML, почему загружает только в Explorer asked86 AJAX и COMET 2 18.12.2009 16:29
Спойлер работает только на один объект на странице. Shanks Общие вопросы Javascript 4 10.05.2009 14:53