Html 如何在KineticJS精灵上使用自己的自定义属性?

Html 如何在KineticJS精灵上使用自己的自定义属性?,html,sprite,kineticjs,Html,Sprite,Kineticjs,我正在使用KineticJS Sprite对象创建一个简单的HTML5 2D画布游戏。我需要每个精灵都具有某些特征,例如“盾牌”、“火力”、“速度”等。因此,我需要向精灵对象添加自己的自定义属性 理想情况下,我想要的是: mySpriteObj.setCustom('shield',50)//将自定义属性设置为50 ……然后 var-shield=mySpriteObj.getCustom('shield')//返回50 但似乎没有这样的事。我确实尝试将attr属性(getAttr和setAtt

我正在使用KineticJS Sprite对象创建一个简单的HTML5 2D画布游戏。我需要每个精灵都具有某些特征,例如“盾牌”、“火力”、“速度”等。因此,我需要向精灵对象添加自己的自定义属性

理想情况下,我想要的是:

mySpriteObj.setCustom('shield',50)//将自定义属性设置为50

……然后

var-shield=mySpriteObj.getCustom('shield')//返回50

但似乎没有这样的事。我确实尝试将attr属性(
getAttr
setAttr
)与我自己的自定义值一起使用,但这不起作用

有没有一种简单的方法将您自己的变量与Sprite对象关联

谢谢 Owen

即使
getAttr()
setAttr()
是执行此操作的最佳方法,但只要您不尝试使用
.toJSON()
保存画布,然后重新创建节点,您就可以像这样直接指定任何自定义值:

mySpriteObj.shield = someValue;
mySpriteObj.speed = someOtherValue;
var myObjSpeed = mySpriteObj.speed;
var myObjShield = mySpriteObj.shield;

尽管如此,您可能希望使用
getAttr()
setAttr()
共享代码,并尝试修复其中的错误

要将方法添加到
Kinetic.Shape
中,可以使用
addMethods
功能查看

您可以查看有关如何使用此方法的示例

例如:

Kinetic.Util.addMethods(Kinetic.Shape, {
  getCustom: function() {
    //getCustom attribute code here
  },
  getCustom2: function() {
    //getCustom attribute code here
  }
});
请注意,通过在对象中为
addMethod
函数的第二个参数添加更多属性(函数),可以添加多个函数

正如Ani所说,您应该使用
getAttr()
setAttr()
函数来获取和设置自定义属性


另外值得注意的是,toJSON()方法也不会保存这些属性。我的错是,实际上我想说toJSON,并编写了toDataURL。谢谢你指出它!!!是的,谢谢,它似乎实际上与上面的设置变量和getAttr一起工作来检索。-但是当我声明我的精灵对象时,必须首先添加属性。@Owen,您可以在初始化精灵时设置属性。新的动力学.Sprite({MyAttr1:attr1,MyAttr2:attr2,…});谢谢,但那是形状,不是雪碧。我也可以在精灵对象上使用addMethods吗?Owen,当然可以。由于KineticJS是OOP,所以Sprite是Kinetic.Shape的一个子类。事实上,所有的动力学“形状”都是动力学.Shape的子类,这就是为什么我用它作为例子。