Возвращаемый массив из функции
- Решено Эллиотом Б. Спасибо!
Может также учитывать все другие изменения.
Вот результат. Спасибо, всем, за быстрые ответы! 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;
}
Ответы
Ответ 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"
}