web-dev-qa-db-fra.com

Renvoyer tableau de fonction

- résolu par Elliot B. Merci! Peut également prendre en compte les autres modifications.

Voici le résultat. Merci à tous pour les réponses rapides! http://dl.dropbox.com/u/18785762/Rust/index.html

J'écris un jeu en javascript et je veux conserver les fichiers pour faire correspondre les identifiants de blocs aux fichiers d'un fichier .js séparé du compilateur de cartes, afin de pouvoir modifier facilement les choses. Cependant, les identifiants sont stockés dans un tableau et je n'arrive pas à le faire utiliser correctement la fonction de retour. De l'aide?

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

Au minimum, changez ceci:

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

Pour ça:

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

Il y a quelques corrections à signaler. First, images n'est pas défini dans votre fonction d'origine. Par conséquent, l'attribution de valeurs de propriétés génère une erreur. Nous corrigeons cela en remplaçant images par IDs. Second, vous voulez renvoyer un Object, pas un Array. Les valeurs de propriété d'un objet peuvent s'apparenter à un tableau associatif ou à un hachage - un tableau ne peut pas. Nous changeons donc la déclaration de var IDs = new Array(); en var IDs = new Object();.

Après ces modifications, votre code fonctionnera correctement, mais il peut être simplifié davantage. Vous pouvez utiliser la notation abrégée (c'est-à-dire, raccourci valeur de propriété d'objet) pour créer l'objet et le renvoyer immédiatement:

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

Votre fonction BlockID utilise la variable non définie images, ce qui entraînera une erreur. De plus, vous ne devriez pas utiliser un Array ici - les mappages de valeurs-clés JavaScripts sont des objets simples:

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

plus propre:

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

ou juste

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