34

--Elliot B によって解決されました。ありがとうございます。他の変更も考慮に入れる場合があります。

これが結果です。みなさん、素早い回答ありがとうございます!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;
}
4

4 に答える 4

48

少なくとも、これを変更します。

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"
    };
}
于 2012-08-21T16:48:25.720 に答える
14

BlockID関数が未定義の変数を使用しているためimages、エラーが発生します。また、Arrayここでは使用しないでください - JavaScript のキー値マップは単純なオブジェクトです。

function BlockID() {
    return {
        "s": "Images/Block_01.png",
        "g": "Images/Block_02.png",
        "C": "Images/Block_03.png",
        "d": "Images/Block_04.png"
    };
}
于 2012-08-21T16:52:22.833 に答える
8

きちんと:

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"
}
于 2012-08-21T16:51:29.270 に答える