Javascript 无法更改帧中单击按钮时的纹理
我正在尝试加载一个gltf模型,通过使用register组件更改按钮单击时的纹理。现在我可以按预期加载和显示模型了。但是,当单击按钮进行纹理更改时,我无法反映任何更改 这是我试过的Javascript 无法更改帧中单击按钮时的纹理,javascript,three.js,aframe,Javascript,Three.js,Aframe,我正在尝试加载一个gltf模型,通过使用register组件更改按钮单击时的纹理。现在我可以按预期加载和显示模型了。但是,当单击按钮进行纹理更改时,我无法反映任何更改 这是我试过的 <div class=" radisi"> <input type='button' class='radmi rad1' value='next' /></div> <a-entity id="newmod" example gltf-model="src: url(
<div class=" radisi">
<input type='button' class='radmi rad1' value='next' /></div>
<a-entity id="newmod" example gltf-model="src: url(model/straw.glb);"
position="0 1.8 -1" scale="1,1,1"></a-entity>
AFRAME.registerComponent('example', {
init: function() {
var el = this.el;
el.addEventListener('model-loaded', function (e) {
e.detail.model.traverse(function(child) {
if (child instanceof THREE.Mesh){
if (child.material.name == "Craem") {
material.map = new THREE.TextureLoader().load( "assets/img/choco.png" );
}
}
});
})
}
},3000)
它表示未定义的addEventListener。
请告诉我我错过了什么。多谢各位 您注册了一个组件,以等待加载模型并更改材质 然后,您有一个单击侦听器,它再次等待加载模型,而此时模型可能已经加载。在jQuery支持的单击侦听器中不能执行this.el。此.el由A-Frame组件提供
将单击侦听器移动到组件中,然后从单击侦听器中删除模型加载的侦听器。再次调用网格。这对我很有效
$(".radisi").click(function(){
let object = el.getObject3D('mesh');
object.traverse(function(child) {
if (child instanceof THREE.Mesh)
{
if (child.material.name == "Craem") {
child.material.map=new THREE.TextureLoader().load( "assets/img/strawberry.png" );;
}
}
});
});
尝试设置material.needsUpdate=true;在指定material.map之后?编辑:nvm-未正确阅读问题。但是您的单击处理程序似乎不在组件的范围内发生。您需要保留对组件的引用,并使用该引用代替this.el,因为单击处理程序中的this可能是窗口或其他内容。@manthrax尝试使用var el=window.el;在将click listener移动到组件中并删除加载的模型后,它再次显示addEventListener未定义,您能告诉我在e.detail.model.traverse中我应该替换什么来代替e吗?e、 detail.model.traversefunctionchild{console.logclicked;if-child-instanceof-THREE.Mesh{if-child.material.name==Craem{child.material.map=new-THREE.TextureLoad-assets/img/vanilla.png;}}}};
$(".radisi").click(function(){
let object = el.getObject3D('mesh');
object.traverse(function(child) {
if (child instanceof THREE.Mesh)
{
if (child.material.name == "Craem") {
child.material.map=new THREE.TextureLoader().load( "assets/img/strawberry.png" );;
}
}
});
});