0

我正在为我的 HTML 游戏制作一个商店系统,我想制作它,以便当您单击一个项目时,它会获取 id,并将该项目的变量降低 1。

if(e.shiftKey && inShop[this.id] === 0) {
    coins = coins+price[this.id]
    coinUpdate();
    [this.id]--;    
}

var fish1 = 1
<html>
    <img class="item cookable" id="fish1" src="source">
</html> 

例如,当我点击一条鱼时,我希望它降低你的库存中有多少鱼的变量。所以我需要更改[this.id]一个同名的变量。

4

3 回答 3

1

JS 中的所有全局变量都是在 window 对象上创建的。如果每个 id 有一个变量,那么您只需要执行window[this.id]--or window[this.id]++。无论如何,在 JavaScript 中,Window 对象充当全局命名空间,一般来说,将全局命名空间与变量混在一起是不好的做法。您应该创建一个包含所有项目计数器的新对象(例如items),并且对于添加的每个项目,您可以执行items[this.id]++items[this.id]--删除它们时执行

于 2013-09-02T17:03:13.690 回答
1

[this.id]--不会工作。这将创建一个具有单个元素的数组(由 引用的字符串this.id),并尝试减少该数组。并且递减数组没有多大意义。

你不能像这样动态地访问局部变量(在某些情况下你可以,但实际上你不应该)。但是,您可以使用属性来做到这一点,因此您必须稍微重新调整一下。

将你拥有的所有东西的数量存储在一个对象中怎么样,也许称之为inventory.

var inventory = {
    fish1: 10,
    fish2: 5,
    worms: 3
};

现在您只需稍作调整即可使用减量方法:

if(e.shiftKey && inShop[this.id] === 0) {
    coins = coins+price[this.id]
    coinUpdate();
    inventory[this.id]--; // decrement an item count in your inventory
}
于 2013-09-02T17:03:43.597 回答
1

不要使用该window方法。它仅适用于global变量。

全局变量的定义与some_var = 10;如果var some_var = 10;您来自桌面编程背景相反,您会发现 JS 中的全局变量非常尴尬。

相反,使用命名空间或对象(此方法)。

像这样定义您的库存:

var inventory = {
    goldfish: 10,
    seahorse: 10,
    jellyfish: 10
}

至于 HTML,id 的方法是可以的,但是为什么不使用data属性呢?它可以容纳非常适合这种情况的元数据。

<img src="//placehold.it/32x32" class="item cookable" data-type="fish">

对此的访问是通过 .data 方法内置到 jQuery 中的,因此当您需要根据单击的内容减少或增加数量时,只需在必要时使用以下命令:

// Fetch the "type" of fish from the data attribute
var type = $(this).data("type");

// And update the inventory
inventory[type]--;

data属性用于其他元数据,以便data-foo="hello" data-bar="world"

这些可以使用 jQuery 作为对象获取.data(),它会返回{foo: "hello", bar: "world"} or fetch them individually by passing the data name.data("foo")`

就个人而言,我会使用它而不是 ID。

于 2013-09-02T17:21:00.583 回答