我使用scenejs框架创建了一个webgl动画。由于它包含许多相同的元素,因此我希望尽量减少所用代码的数量并重新使用这些元素。通过SceneJS重用JSON对象节点
首先,我得diskJSON定义如下:
var diskJSON = [{
type: "disk",
radius: 3,
inner_radius: 2}];
当我运行sceneJS下面的代码,它工作正常。
{
type: "material",
emit: 0,
baseColor: {
r: 0.3,
g: 0.3,
b: 0.9
},
specularColor: {
r: 0.9,
g: 0.9,
b: 0.9
},
specular: 0.9,
shine: 100.0,
nodes: [ {
type: "translate",
x:10,
y:1,
nodes: [
{
type: "translate",
z:speedMultiplier*0.8,
nodes:[{
type: "disk",
radius: 3,
inner_radius: 2
}]
},
{
type: "translate",
z:speedMultiplier*9.8,
nodes:[{
type: "disk",
radius: 3,
inner_radius: 2
}]
},
{
type: "translate",
z:speedMultiplier*11.64,
nodes:[{
type: "disk",
radius: 3,
inner_radius: 2
}]
},
{
type: "translate",
z:speedMultiplier*13.32,
nodes:[{
type: "disk",
radius: 3,
inner_radius: 2
}]
}
]
}
]
}
然而,当我试图重复使用相同的diskJSON如先前定义的,它仅创建一个节点,而不是4:
{
type: "material",
emit: 0,
baseColor: {
r: 0.3,
g: 0.3,
b: 0.9
},
specularColor: {
r: 0.9,
g: 0.9,
b: 0.9
},
specular: 0.9,
shine: 100.0,
nodes: [ {
type: "translate",
x:10,
y:1,
nodes: [
{
type: "translate",
z:speedMultiplier*0.8,
nodes:diskJSON
},
{
type: "translate",
z:speedMultiplier*9.8,
nodes:diskJSON
},
{
type: "translate",
z:speedMultiplier*11.64,
nodes:diskJSON
},
{
type: "translate",
z:speedMultiplier*13.32,
nodes:diskJSON
}
]
}
]
}
应用程序将有数以千计的节点,所以不必每一次重新定义它似乎都是一种浪费。这是scenejs的问题还是这是按照Javascript/JSON功能的预期工作?
感谢您的提示答案,很高兴听到这不只是我快要疯了两种: ) – Niklas 2011-05-28 21:50:39