Подтвердить что ты не робот

Возвращаемый массив из функции

- Решено Эллиотом Б. Спасибо! Может также учитывать все другие изменения.

Вот результат. Спасибо, всем, за быстрые ответы! http://dl.dropbox.com/u/18785762/Rust/index.html

Я пишу игру в javascript, и я хочу сохранить файлы для соответствия идентификаторам блоков файлам в отдельном .js файле из компилятора карты, чтобы я мог легко редактировать вещи. Однако идентификаторы хранятся в массиве, и я не могу заставить его правильно использовать функцию возврата. Любая помощь?

drawmap.js:

function drawmap() {

    var images = BlockID();

    var level = [
    "ssssssssssssssssssssss",
    "sgggggggggCCCCCdddddss",
    "ssssssssss     sssssss"
    ];

    var top = 100;
    var left = 100;
    var mytop = top;
    var myleft = left;
    for (y=0; y<level.length; ++y) {
        var row = level[y];
        for (x=0; x < row.length; ++x) {
            var c = row.charAt(x);
            if(c != ' ') {
                img_create(images[c], mytop, myleft);
            }
            mytop += 13;
            myleft += 27;
        }
        mytop = top + (y+1)*13;
        myleft = left - (y+1)*27;
    }
}

mapread.js:

function BlockID() {
    var IDs = new Array();
        images['s'] = "Images/Block_01.png";
        images['g'] = "Images/Block_02.png";
        images['C'] = "Images/Block_03.png";
        images['d'] = "Images/Block_04.png";
    return IDs;
}
4b9b3361

Ответ 1

Как минимум, измените это:

function BlockID() {
    var IDs = new Array();
        images['s'] = "Images/Block_01.png";
        images['g'] = "Images/Block_02.png";
        images['C'] = "Images/Block_03.png";
        images['d'] = "Images/Block_04.png";
    return IDs;
}

Для этого:

function BlockID() {
    var IDs = new Object();
        IDs['s'] = "Images/Block_01.png";
        IDs['g'] = "Images/Block_02.png";
        IDs['C'] = "Images/Block_03.png";
        IDs['d'] = "Images/Block_04.png";
    return IDs;
}

Есть пара исправлений. Первый, images не определен в вашей исходной функции, поэтому присвоение ему значений свойств приведет к ошибке. Мы исправим это, изменив images на IDs. Второй, вы хотите вернуть Object, а не Array. Объекту могут быть присвоены значения свойств, родственные ассоциативному массиву или хешу - массив не может. Поэтому мы меняем объявление var IDs = new Array(); на var IDs = new Object();.

После этих изменений ваш код будет работать нормально, но он может быть упрощен далее. Вы можете использовать сокращенную нотацию (т.е. Стенографию свойства объекта литерала) для создания объекта и немедленного возврата:

function BlockID() {
    return {
            "s":"Images/Block_01.png"
            ,"g":"Images/Block_02.png"
            ,"C":"Images/Block_03.png"
            ,"d":"Images/Block_04.png"
    };
}

Ответ 2

В вашей функции BlockID используется переменная undefined images, которая приведет к ошибке. Кроме того, здесь не следует использовать Array - Java-скрипты-значения-карты - это простые объекты:

function BlockID() {
    return {
        "s": "Images/Block_01.png",
        "g": "Images/Block_02.png",
        "C": "Images/Block_03.png",
        "d": "Images/Block_04.png"
    };
}

Ответ 3

аккуратнее:

function BlockID() {
  return {
    "s":"Images/Block_01.png",
    "g":"Images/Block_02.png",
    "C":"Images/Block_03.png",
    "d":"Images/Block_04.png"
   }
}

или просто

var images = {
  "s":"Images/Block_01.png",
  "g":"Images/Block_02.png",
  "C":"Images/Block_03.png",
  "d":"Images/Block_04.png"
}