Este código de juego parece estar bien, pero no funciona:

//Get canvas and context
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');

//Capture keypresses
var keys = [];
document.onKeyDown = function (e) {keys[e.keyCode] = true;};
document.onKeyUp = function (e) {keys[e.keyCode] = false;};

//Set game variables
var characters;
characters.charList = [];
var player = {};

//Character constructor
function Character (Name, Strength, Speed, Intelligence, Reflexes, Age, Height, Weight, Weapon, UsesMagic, MagicType, Armor, Hair, Eyes, Skin, Clothes, Species, Type, Accessories) {
        this.name = Name;
        this.strength = Strength;
    this.speed = Speed;
    this.intelligence = Intelligence;
    this.reflexes = Reflexes;
    this.age = Age;
    this.height = Height;
    this.weight = Weight;
    this.weapon = Weapon;
    this.usesMagic = UsesMagic;
    this.magicType = MagicType;
    this.armor = Armor;
    this.hair = Hair;
    this.eyes = Eyes;
    this.skin = Skin;
    this.clothes = Clothes;
    this.species = Species;
    this.type = Type;
    if (Accessories) {
            this.accessories = Accessories;
    }
    characters.charList[characters.charList.length] = Name;
}

characters.Xantar = new Character('Xantar', 1, 1, 1, 1, 1, 1, 1, 'sword', true, 'derp', [], 'hair is brown\?', 'duh', 'foo', [], 'animale', 'wolf', []);
alert(characters.Xantar.weapon + '   ' + characters[0].type);

//Activate mainloop and get value for pausing purposes
var mainloopInterval = setInterval(mainloop, 5);
//Main game loop
function mainloop(){

}

El programa parece detenerse en:

characters.charList = [];

Simplemente no veo el problema aquí. Aquí está el HTML relevante:

<canvas id='canvas' style='border:1px solid black;'>Your browser does not support canvas. Please update your browser.</canvas>

Nota: estoy ejecutando esto en JSFiddle. Si alguien pudiera ayudarme aquí, estaría realmente agradecido. Aquí está el enlace: https://jsfiddle.net/q6vdph1p/14/.

1
Feathercrown 9 may. 2016 a las 14:22

3 respuestas

La mejor respuesta

Como se señaló anteriormente, debe asignar un objeto a su variable characters antes de poder acceder a las propiedades que contiene.

Simplemente declarándolo con var characters; le asignará el valor de undefined e intentará acceder a undefined.charList y le asignará una matriz vacía.

Una forma más adecuada, resistente a fallas y legible de declararlo sería construir la estructura de datos vacía, de esta manera:

var characters = {
    charList: []
};

Además, agregar al final de una matriz es más seguro usando array.push() que indexar por array.length, es decir

characters.charList.push(Name);

En lugar de

characters.charList[characters.charList.length] = Name;
1
Flygenring 9 may. 2016 a las 11:44
  1. Los "caracteres" variables deben ser un objeto. var characters = {};
  2. charList no debe inicializarse con la palabra clave "var" porque no es una variable nueva, por lo que es solo characters.charList = [];
  3. En la fila 42 no es characters[0].type sino characters.Xantar.type JSFiddle
2
Nick Messing 9 may. 2016 a las 11:29

Necesita configurarlo como un objeto var characters = {};

2
Konst 9 may. 2016 a las 11:25