自定义对象/类型Javascript

自定义对象/类型Javascript,javascript,canvas,types,Javascript,Canvas,Types,我正在使用canvs在JS中开发一个简单的2d游戏 该游戏由一名骑士组成,他四处奔跑以杀死地精,地精一旦被触碰,就会重置到兰戈的位置。我想为每一个被杀的地精留下血盘 目前,在我重新绘制画布之前,我使用先前的地精死亡的X和Y坐标来绘制我的血溅图像 不过我想为所有的地精做这件事。在Java这样的传统语言中,我会定义一个类型,例如带有两个属性X和Y的“blood” 然后,我会在每一轮使用地精当前的合作词创建一个这种类型的新实例,然后将这种类型添加到一个数组中,我会循环并 然后打印此数组中的所有对象 我

我正在使用canvs在JS中开发一个简单的2d游戏

该游戏由一名骑士组成,他四处奔跑以杀死地精,地精一旦被触碰,就会重置到兰戈的位置。我想为每一个被杀的地精留下血盘

目前,在我重新绘制画布之前,我使用先前的地精死亡的X和Y坐标来绘制我的血溅图像

不过我想为所有的地精做这件事。在Java这样的传统语言中,我会定义一个类型,例如带有两个属性X和Y的“blood”

然后,我会在每一轮使用地精当前的合作词创建一个这种类型的新实例,然后将这种类型添加到一个数组中,我会循环并 然后打印此数组中的所有对象

我对JS很陌生,因为它是一种函数式语言,所以情况有点不同。我该如何定义这样一种类型,以便在游戏的每次迭代中都能“新建”到数组中

var blood = {
    x: 0,
    y: 0        
};
这里是我当前拥有的blood对象

您可以用Javascript创建“类”作为函数。在函数中使用
this.x
类似于创建名为
x
的成员变量:

var Blood = function() {
    this.x = 0;
    this.y = 0;
}
var blood = new Blood()
console.log(blood.x);
这些并不是像Java这样的面向对象语言意义上的类或类型,只是通过使用Javascript的作用域规则来模仿它们的一种方式

到目前为止,这里没有太多有用的东西——一个简单的对象映射也可以。但是,如果您需要血液“类”中的更多逻辑,如成员函数等,这种方法可能很有用。您可以通过修改对象的原型来创建这些逻辑:

Blood.prototype.createSplatter = function() {
    return [this.x-1, this.y+1]; // (idk, however you create a splatter)
};
blood.createSplatter();

关于Javascript类的更多细节,我建议看一下(向下滚动到“类、继承和超级”)。它们有一些简化的CS语法和JS翻译中的类的并排示例。

您可以在Javascript中创建“类”作为函数。在函数中使用
this.x
类似于创建名为
x
的成员变量:

var Blood = function() {
    this.x = 0;
    this.y = 0;
}
var blood = new Blood()
console.log(blood.x);
这些并不是像Java这样的面向对象语言意义上的类或类型,只是通过使用Javascript的作用域规则来模仿它们的一种方式

到目前为止,这里没有太多有用的东西——一个简单的对象映射也可以。但是,如果您需要血液“类”中的更多逻辑,如成员函数等,这种方法可能很有用。您可以通过修改对象的原型来创建这些逻辑:

Blood.prototype.createSplatter = function() {
    return [this.x-1, this.y+1]; // (idk, however you create a splatter)
};
blood.createSplatter();


关于Javascript类的更多细节,我建议看一下(向下滚动到“类、继承和超级”)。它们有一些简化的CS语法和JS翻译的类的并排示例。

因为您无法有效地将
.splatter
方法添加到
createBlood
返回的对象;-)@Alnitak但是
.splatter
不会在对象的实例之间共享…这是我的观点-如果它在原型上,它是共享的,但是如果
返回{x:,y:,splatter:function(…)}
不会。因为您无法有效地将
.splatter
方法添加到
createBlood
?;-)返回的对象中@Alnitak但是
.splatter
不会在对象的实例之间共享…这是我的观点-如果它在原型上,它是共享的,但是如果
返回{x:,y:,splatter:function(…)}
它就不会被共享。