1. ホーム
  2. javascript

[解決済み] 関数から配列を返す

2022-03-06 09:51:17

質問

--Solved by Elliot B. Thanks! 他の修正も考慮に入れてもいいかもしれません。

以下はその結果です。皆さん、迅速な回答ありがとうございました。 http://dl.dropbox.com/u/18785762/Rust/index.html

javascriptでゲームを書いているのですが、ブロックIDをファイルにマッチングさせるためのファイルを、マップコンパイラとは別の.jsファイルに保存して、簡単に編集できるようにしたいのですが、どうすればよいでしょうか?しかし、IDは配列に格納されており、うまくreturn関数を使うことができないようです。何か良い方法はないでしょうか?

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;
}

解決方法は?

最低限、これを変更してください。

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 は元の関数で定義されていないので、これにプロパティ値を代入するとエラーが発生します。これを修正するために imagesIDs . 第二 を返したい場合は 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"
    };
}