react vr中文網(wǎng)--www.vr-react.com
qq群:481244084
有時間我們需要在react vr 和client之間進行通信昼蛀,舉個例子,鼠標點擊了某個物體,需要改變相機的鏡頭贩耐,截止目前為止,react-vr的版本是1.2.0,相機的操作還都是在原生threejs里面進行的肖粮,也就是在react vr目錄下面的client.js文件里面操作,而要實現(xiàn)這兩個的通信球散,就需要用到事件來進行了尿赚。
下面直接上具體的操作:
一散庶、首先在client.js里面注冊監(jiān)聽事件:
也就是在VRInstance的實例里面的 return vr;之前添加如下代碼:
vr.rootView.context.worker.addEventListener('message',onVRMessage);
也就是在根rootview的下下文對象中進行中凌净,查看源碼我們可以看到悲龟,react vr本身就是利用這個監(jiān)聽事件進行消息傳遞的,一邊postMessage冰寻,另一邊onmessage,
這個具體傳遞消息的工人就是Worker须教,這個worker有下面的幾個方法:
onmessage
postMessage
terminate
addEventListener
而具體需要工人干哪些事,是在ReacNativeContext下文中進行的斩芭,不管是初始化轻腺、創(chuàng)建根view、銷毀根view划乖、更新每一幀贬养、更新根view、react模塊的回調(diào)都離不開這個工人來進行消息或者命令的傳達琴庵,它就有點像老總的小蜜一樣误算。
二、添加監(jiān)聽事件的具體實現(xiàn)
在client.js里面添加下面的代碼迷殿,當然類型和類型里面的方法你自己根據(jù)自己的需求來定啦儿礼,我這兒是sceneChanged,表示場景切換了
三庆寺、在index.vr.js里面?zhèn)鬟f消息給client
postMessage ( { type: "sceneChanged"} )
在你需要的地方調(diào)用這個方法就行了蚊夫,在client里面就可以收到了,發(fā)送一堆json對象過去懦尝。
四知纷、如何實現(xiàn)反向傳遞消息呢
? ? 4.1在client.js里面發(fā)送事件:
vr.rootView.context.worker.postMessage( {type:"newPosition",positionx:15});
4.2在index.vr.js里面進行接收
window.addEventListener ( 'message' , this. onWindowMessage);
具體的方法:
onWindowMessage = (e )=>{
? ? if ( e.data.type == 'newPosition'){
? ? ? ? //這里面接收到新的參數(shù),跟新view啥的
? ? }
}