设置变量时破坏游戏代码

Game code breaking when setting variable

本文关键字:游戏 代码 变量 设置      更新时间:2023-09-26

这个游戏代码看起来不错,但不起作用:

//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(){
}

程序似乎停止在:

characters.charList = [];

我根本看不出这里有什么问题。以下是相关的HTML:

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

注意:我在JSFiddle上运行这个。如果有人能在这里帮助我,我将不胜感激。以下是链接:https://jsfiddle.net/q6vdph1p/14/.

需要将其设置为对象var characters = {};

  1. 变量"character"必须是一个对象。var characters = {};
  2. charList不应该用"var"关键字初始化,因为它不是一个新变量,所以它只是characters.charList = [];
  3. 第42行不是characters[0].type,而是characters.Xantar.typeJSFiddle

如前所述,您需要将一个对象分配给characters变量,然后才能访问其中的属性。

仅仅用var characters;声明它就会给它分配undefined的值,尝试访问undefined.charList并给它分配一个空数组将失败。

一种更合适、更抗故障、更可读的声明方式是构建空数据结构,如下所示:

var characters = {
    charList: []
};

此外,使用array.push()添加到数组末尾比使用array.length索引(即)更安全

characters.charList.push(Name);

而不是

characters.charList[characters.charList.length] = Name;