2013-10-16 64 views
1

我正在使用canvs在JS中进行简单的2D游戏。自定义对象/类型Javascript

这个游戏由一个骑士杀死地精,一旦碰过地精就会重置到一个rangom位置。我想为每个杀死的地精留下血淋淋的喷泉。

目前,在我重画画布之前,我使用之前的X和Y坐标,从地精死亡的地方绘制我的血液飞溅图像。

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

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

我对JS很新,既然它是一种功能性语言,事情有点不同。我究竟会如何定义一个类似这样的类型,以便在游戏的每一次迭代中都可以将数组“新”插入数组中?

var blood = { 
    x: 0, 
    y: 0   
}; 

这里是目前血液对象我有

回答

1

您在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(); 

(Fiddle)

有关的Javascript更多详情类,我建议看看CoffeeScript syntax(向下滚动到“类,继承和超级”)。他们在简化的CS语法中有一些类的并行示例,以及JS翻译。

+0

,因为您无法有效地将'.splatter'方法添加到由'createBlood'返回的对象中? ;-) – Alnitak

+0

@Alnitak但是然后'.splatter'不会在对象的实例之间共享...... – McGarnagle

+0

这是我的观点 - 如果它在原型上是共享的,但是如果你返回{x :, y: ,splatter:function(...)}'不会。 – Alnitak