如果没有传递数据,aframe 实体如何默认为模式实体
How does an aframe entity defaults to the schema ones if no data is passed on
我在理解 aFrame 中实体如何与模式和数据一起工作时遇到了一些困难。原谅我,我是图书馆的新手,也许我遗漏了一些东西。谢谢
考虑以下几点:
// register the aframe component (Button.js):
import { registerComponent, THREE } from 'aframe'
const button = registerComponent('button', {
schema: {
width: { type: 'number', default: 0.6 },
height: { type: 'number', default: 0.40 },
color: { type: 'string', default: 'orange' },
},
init: function() {
const schema = this.schema // Schema property values.
const data = this.data // Component property values.
const el = this.el // Reference to the component's entity.
// Create geometry.
this.geometry = new THREE.BoxBufferGeometry(data.width || schema.width.default, data.height || schema.height.default, data.depth || schema.depth.default)
// Create material.
this.material = new THREE.MeshStandardMaterial({ color: data.color || schema.color.default })
// Create mesh.
this.mesh = new THREE.Mesh(this.geometry, this.material)
// Set mesh on entity.
el.setObject3D('mesh', this.mesh)
}
})
export default button
// add the entity in the app (App.js)
import button from './Button'
<a-entity button="width: 0.4; height: 0.4: color: 'green'" position="0 0 0"></a-entity>
现在,对于上面的示例,我希望我的组件将使用数据而不是模式默认值。如果我只想做:
<a-entity button position="0 0 0"></a-entity>
它将使用架构默认的。
这是应该做的吗?
我见过很多人们只使用数据的例子。
谢谢
schema
不适合直接使用。来自 docs:
The schema defines the properties of its component. (...)
The component’s property type values are available through this.data
想法是这样的:
您在架构中定义属性(具有默认值)
schema {
prop: {default: "default value"}
},
您使用 this.data[prop_name]
访问值:
init: function() {
console.log("prop value at init:", this.data.prop)
},
您可以监控 属性 更新(例如通过 update
处理程序中的 setAttribute("propname", "newValue")
:
update: function(oldData) {
console.log("prop changed from", oldData.prop, "to", this.data.prop)
},
在这样的设置中:
<!-- this.data.prop will contain the default values -->
<a-entity foo></a-entity>
<!-- this.data.prop will contain the new value -->
<a-entity foo="prop: value></a-entity>
我在理解 aFrame 中实体如何与模式和数据一起工作时遇到了一些困难。原谅我,我是图书馆的新手,也许我遗漏了一些东西。谢谢
考虑以下几点:
// register the aframe component (Button.js):
import { registerComponent, THREE } from 'aframe'
const button = registerComponent('button', {
schema: {
width: { type: 'number', default: 0.6 },
height: { type: 'number', default: 0.40 },
color: { type: 'string', default: 'orange' },
},
init: function() {
const schema = this.schema // Schema property values.
const data = this.data // Component property values.
const el = this.el // Reference to the component's entity.
// Create geometry.
this.geometry = new THREE.BoxBufferGeometry(data.width || schema.width.default, data.height || schema.height.default, data.depth || schema.depth.default)
// Create material.
this.material = new THREE.MeshStandardMaterial({ color: data.color || schema.color.default })
// Create mesh.
this.mesh = new THREE.Mesh(this.geometry, this.material)
// Set mesh on entity.
el.setObject3D('mesh', this.mesh)
}
})
export default button
// add the entity in the app (App.js)
import button from './Button'
<a-entity button="width: 0.4; height: 0.4: color: 'green'" position="0 0 0"></a-entity>
现在,对于上面的示例,我希望我的组件将使用数据而不是模式默认值。如果我只想做:
<a-entity button position="0 0 0"></a-entity>
它将使用架构默认的。 这是应该做的吗? 我见过很多人们只使用数据的例子。 谢谢
schema
不适合直接使用。来自 docs:
The schema defines the properties of its component. (...) The component’s property type values are available through this.data
想法是这样的:
您在架构中定义属性(具有默认值)
schema { prop: {default: "default value"} },
您使用
this.data[prop_name]
访问值:init: function() { console.log("prop value at init:", this.data.prop) },
您可以监控 属性 更新(例如通过
update
处理程序中的setAttribute("propname", "newValue")
:update: function(oldData) { console.log("prop changed from", oldData.prop, "to", this.data.prop) },
在这样的设置中:
<!-- this.data.prop will contain the default values -->
<a-entity foo></a-entity>
<!-- this.data.prop will contain the new value -->
<a-entity foo="prop: value></a-entity>