声明为现有数组不起作用

Declaring as an existing array doesn't work

在您阅读此代码并精疲力尽之前,请先了解它是一个名为 p5.js

的开源 JavaScript 库

https://p5js.org/reference/

我有基本包,没有附加包。看看这个...

var weapons = {
    //[WEAPON NAME]: [accuracy,repeat,recoil,recoilmax,recoil-recovery,damage,firerate,reloadspeed],
    M4A1: [10, 10, 0.2, 5, 1],

    //primary: weapons.M4A1,//ERROR
    //secondary: weapons.M4A1,//ERROR
    equipped: weapons.M4A1,
};

var inventory = {
  accuracy: weapons.M4A1[0],
  accuracyREF: 10,
  recoil: 0.2,
  recoilMAX: 3,
  recoilRecovery: 1,
  damage: 1,
  fireRate: 1,
};

显示空白屏幕,直到我删除声明 weapons.equipped

的行

我还尝试使用如下所示的 SPLICE p5.JS 语法同样适用于 arrayCopy()

var weapons = {
  //[WEAPON NAME]: [accuracy,repeat,recoil,recoilmax,recoil-recovery,damage,firerate,reloadspeed],
  M4A1: [10, 10, 0.2, 5, 1],

  //primary: weapons.M4A1,//ERROR
  //secondary: weapons.M4A1,//ERROR
  equipped: [0,0,0,0,0],
};

splice(weapons.M4A1, equipped, 0);

var inventory = {
  accuracy: weapons.M4A1[0],
  accuracyREF: 10,
  recoil: 0.2,
  recoilMAX: 3,
  recoilRecovery: 1,
  damage: 1,
  fireRate: 1,
};

这对我的游戏来说是必不可少的,如果做不到,我将不得不放弃它

var weapons 失败,因为您试图将其属性之一分配给自身,但它尚不存在。因此 var inventory 失败,因为 weapons 由于第一个错误而未定义。

要了解发生了什么,请从这里开始:

var weapons = {
  M4A1: [10, 10, 0.2, 5, 1],
  equipped: weapons.M4A1 // <-- weapons.M4A1 must be determined first
};
// weapons === undefined

在实例化var weapons之前,JS需要处理weapons.M4A1的值才能赋值给equipped。问题是 weapons 还不存在。

接下来您要尝试实例化 inventory

// remember, weapons === undefined
var inventory = {
  accuracy: weapons.M4A1[0], // again, weapons.M4A1[0] must be determined
  accuracyREF: 10,
  ...
};
// inventory === undefined

...因此,inventory也无法实例化。


尝试 #2:splice(weapons.M4A1, equipped, 0);

p5/splice 声明 splice 适用于数组,而不适用于对象(以及您的实现的其他问题)。


你能做到吗?

var weapons = {
  M4A1: [10, 10, 0.2, 5, 1],
  equipped: [10, 10, 0.2, 5, 1]
};

var inventory = {
  accuracy: weapons.M4A1[0],
  ...
};

还是这个?

var weapons = {
  M4A1: [10, 10, 0.2, 5, 1],
  equipped: [0,0,0,0,0]
};
weapons.equipped = weapons.M4A1;

var inventory = {
  accuracy: weapons.M4A1[0],
  ...
};

使用 getter functions 的另一种解决方案。有关错误发生原因的解释,请查看@bloodyKnuckles 的回答。

var weapons = {
  //[WEAPON NAME]: [accuracy,repeat,recoil,recoilmax,recoil-recovery,damage,firerate,reloadspeed],
  M4A1: [10, 10, 0.2, 5, 1],
  get primary() {
    return weapons.M4A1
  },
  get secondary() {
    return weapons.M4A1
  },
  get equipped() {
    return weapons.M4A1
  },
};

var inventory = {
  accuracy: weapons.M4A1[0],
  accuracyREF: 10,
  recoil: 0.2,
  recoilMAX: 3,
  recoilRecovery: 1,
  damage: 1,
  fireRate: 1,
};

console.log("weapons", weapons);
console.log("inventory", inventory);