Javascript.RU

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

Не проходит проверка if.
Здравствуйте!
Есть вот такой код:
var target = {

nodes: [],

add: function (x, y, w, h, c) {
        var tmp = new _Target(x, y, w, h, c);
        this.nodes.push(tmp);
    },

create: function (map) {
        var dX = Math.ceil(width / 6),
            dY = Math.ceil(height / 6);
        for (var t1 = 0; t1 < 6; t1++) {
            if (t1 % 2 == 0) continue;
            for (var t2 = 0; t2 < 6; t2++) {
                if (t2 % 2 == 0) continue;
                if (t2 == 3 && t1 == 3) continue;
                var dx = dX * t1,
                    dy = dY * t2;
                this.add(dx - map.width / 2, dy - map.height / 2, map.width, map.height, this.color);
            }
        }
    },

init: function (c) {
        this.color = c;
    },

draw: function () {
        for (en in this.nodes) {
            this.nodes[en].draw();
        }
    },
};

var _Target = function (x, y, w, h, c) {
    this.x = x;
    this.y = y;
    this.width = w;
    this.height = h;
    this.color = c;
};

_Target.prototype.draw = function () {
    drawRect(this.x, this.y, this.width, this.height, this.color);
};

    var map = {
        color: randomColor(),
        width: 30,
        height: 30,
        tiles: [
                [1, 0, 0],
                [1, 0, 1],
                [0, 0, 1]
            ]
    };

         // ВОТ ТУТ НЕ ПРОХОДИТ ПРОВЕРКА!
    for (var i1 in map.tiles) {
        for (var i2 in map.tiles[1]) {
            var tile = map.tiles[i1][i2];
            if (tile == 0) target.init(map.color);
            if (tile == 1) target.init(player.color);
        }
    };


Проблема в том, что проверки нет, всегда выполняется только первое условие. Рисуются квадраты одинакового цвета, а надо определение по цифрам из массива tiles.
Ещё так пробовал:
create: function (map) {
        var dX = Math.ceil(width / 6),
            dY = Math.ceil(height / 6);
        for (var t1 = 0; t1 < 6; t1++) {
            if (t1 % 2 == 0) continue;
            for (var t2 = 0; t2 < 6; t2++) {
                if (t2 % 2 == 0) continue;
                if (t2 == 3 && t1 == 3) continue;
                for (var i1 in map.tiles) {
                    for (var i2 in map.tiles[1]) {
                        var tile = map.tiles[i1][i2];
                        var dx = dX * t1,
                            dy = dY * t2;
                        if (tile == 1) {
                            this.add(dx - map.width / 2, dy - map.height / 2, map.width, map.height, map.color);
                        }
                        if (tile == 0) {
                            this.add(dx - map.width / 2, dy - map.height / 2, map.width, map.height, player.color);
                        }
                    }
                }
            }
        }
    },

Так же выполняется только первое условие и никогда второе.
Вот функция рандомколор:
var randomColor = function () {
    var colors = ['red', 'blue', 'black', 'white', 'green', 'yellow', 'purple'];
    var rndColor = Math.floor(Math.random() * colors.length);
    return colors[rndColor];
};

Хотя она и не нужна, по большому счёту.

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

Сообщение от drakulawz
// ВОТ ТУТ НЕ ПРОХОДИТ ПРОВЕРКА!
может как-то без in написать циклы?
Ответить с цитированием
  #3 (permalink)  
Старый 07.10.2018, 11:44
Аспирант
Отправить личное сообщение для drakulawz Посмотреть профиль Найти все сообщения от drakulawz
 
Регистрация: 13.08.2018
Сообщений: 79

Сообщение от рони
может как-то без in написать циклы?
Пробовал, то же самое - ничего не меняется...

Так:
for (var i1 = 0; i1 < map.tiles.length; i1++) {
        for (var i2; i2 < map.tiles[1].length; i2++) {
            var tile = map.tiles[i1][i2];
            if (tile == 0) target.init(map.color);
            if (tile == 1) target.init(player.color);
        }
    };


Всё то же самое, если, допустим, ставлю в map просто "" будет выполнятся только второе условие.

Последний раз редактировалось drakulawz, 07.10.2018 в 11:48.
Ответить с цитированием
  #4 (permalink)  
Старый 07.10.2018, 12:02
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

drakulawz,
строка 2 очень странная и что такое player.color?
Ответить с цитированием
  #5 (permalink)  
Старый 07.10.2018, 12:03
Аспирант
Отправить личное сообщение для drakulawz Посмотреть профиль Найти все сообщения от drakulawz
 
Регистрация: 13.08.2018
Сообщений: 79

Сейчас вот так сделал:
var map = {
        color: randomColor(),
        width: 30,
        height: 30,
        tiles: [
                [1, 0, 0],
                [1, 0, 1],
                [0, 0, 1]
            ]
    };

    for (var i1 = 0; i1 < map.tiles.length; i1++) {
        for (var i2; i2 < map.tiles[1].length; i2++) {
            var tile = map.tiles[i1][i2];
            if (tile == 0) target.init(map.color);
            if (tile == 1) target.init(player.color);
        }
    };

    create: function (map) {
        var dX = Math.ceil(width / 6),
            dY = Math.ceil(height / 6);
        for (var t1 = 0; t1 < 6; t1++) {
            if (t1 % 2 == 0) continue;
            for (var t2 = 0; t2 < 6; t2++) {
                if (t2 % 2 == 0) continue;
                if (t2 == 3 && t1 == 3) continue;
                var dx = dX * t1,
                      dy = dY * t2;
                      this.add(dx - map.width / 2, dy - map.height / 2, map.width, map.height, this.color); //вот тут меняю this на map появляются рисунки, ставлю randomColor() рисунки есть и разноцветные но, опять таки не по цифрам, пишу player естественно они все цвета плеера но то условие через цикл не работает...
            }
        }
    },


Квадраты вообще пропали.
Ответить с цитированием
  #6 (permalink)  
Старый 07.10.2018, 12:05
Аспирант
Отправить личное сообщение для drakulawz Посмотреть профиль Найти все сообщения от drakulawz
 
Регистрация: 13.08.2018
Сообщений: 79

Сообщение от рони
что такое player.color?
объект плеер:
var player = {
    level: 1,
    hp: 3,
    width: 50,
    height: 50,
    x: 320,
    y: 240,
    step: 2,
    score: 0,
    color: randomColor(),

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

    move: function () {
        if (isKeyDown('UP')) {
            this.y = Math.max(this.y - this.step, 0);
        }
        if (isKeyDown('DOWN')) {
            this.y = Math.min(this.y + this.step, height - this.height);
        }
        if (isKeyDown('LEFT')) {
            this.x = Math.max(this.x - this.step, 0);
        }
        if (isKeyDown('RIGHT')) {
            this.x = Math.min(this.x + this.step, width - this.width);
        }
    },

    init: function (x, y) {
        this.x = x;
        this.y = y;
    },

    collision: function () {
        for (var i in target.nodes) {
            var enemy = target.nodes[i];
            if (isCollision(this.x, this.y, this.width, this.height, enemy.x, enemy.y, enemy.width, enemy.height)) {
                target.destroy(i);
            }
        }
    }
};
Ответить с цитированием
  #7 (permalink)  
Старый 07.10.2018, 12:06
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от drakulawz
for (var i2; i2 < map.tiles[1].length; i2++)
бред какой-то недоделанный
Ответить с цитированием
  #8 (permalink)  
Старый 07.10.2018, 12:13
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

drakulawz,
for (var i1 = 0; i1 < map.tiles.length; i1++) {
        for (var i2 = 0; i2 < map.tiles[i1].length; i2++) {
            var tile = map.tiles[i1][i2];
            if (tile == 0) target.init(map.color);
            if (tile == 1) target.init(player.color);
        }
    };
Ответить с цитированием
  #9 (permalink)  
Старый 07.10.2018, 12:15
Аспирант
Отправить личное сообщение для drakulawz Посмотреть профиль Найти все сообщения от drakulawz
 
Регистрация: 13.08.2018
Сообщений: 79

Вот ещё порядок выполнения скриптов с комментариями, что да как, может я здесь что-то не так подключил:

<script src="scripts/jquery-3.3.1.js"></script> //для полной загрузки страницы, что бы выполнялся скрипт: scripts/script.js;
    <script src="scripts/engine.js"></script>  //здесь выполняется игровой цикл, ничего, напрямую связанного с проблемой;
    <script src="scripts/key.js"></script>  //здесь функции движения игрока;
    <script src="scripts/graph.js"></script>  // глобальные переменные и функции по отрисовке всех "фигур", здесь так же находится функция randomColor;
    <script src="scripts/area.js"></script>  //просто разметка канваса на поля;
    <script src="scripts/player.js"></script>  //выше скинул весь (пока) скрипт;
    <script src="scripts/target.js"></script>  //по сути, так же, весь скрипт скинул выше (самый первый);
    <script src="scripts/script.js"></script>  //здесь производится инициализация всех функций из выше подключённых скриптов и объект map так же здесь.
Ответить с цитированием
  #10 (permalink)  
Старый 07.10.2018, 12:21
Аспирант
Отправить личное сообщение для drakulawz Посмотреть профиль Найти все сообщения от drakulawz
 
Регистрация: 13.08.2018
Сообщений: 79

Сообщение от рони
бред какой-то недоделанный
вообще никакой разницы... В смысле, может так и правильней но ничего не меняется.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проверка, пока файл не будет готов headmaster911 AJAX и COMET 4 18.04.2017 08:44
Проверка input[text] + input[checkbox] avdotion jQuery 4 07.01.2017 15:49
проверка формы не работает в ie begelme Javascript под браузер 6 13.08.2013 01:00
Проверка данных формы составным условием? myafa Элементы интерфейса 8 01.04.2011 08:30
XMLHttpRequest status=0, хотя запрос проходит. arigasa AJAX и COMET 4 15.02.2011 20:14