VirtualMachine
constructor
runtime
setService('runtime')
editingTarget
_dragTarget
extensionManager
block listener
flyout block listener
monitor block listener
variable block listener
method
start: start runtime
greenFlag: runtime.greenFlag, start all threads
stopAll: runtime.stopAll, stop all threads
setTurboMode: runtime.turboMode, turbo mode定硝,加速模式辈双,循環(huán)不導(dǎo)致重繪
setCompatibilityMode: runtime兼容模式金吗,兼容2.0,30TPS
clear: runtime.clear. 清除project data
getPlaygroundData: 獲取editingTarget所在的thread里的data
postIOData: runtime.ioDevice['device_name'].postData则北,向runtime中的設(shè)備發(fā)送數(shù)據(jù)
loadProject: 直接調(diào)用fromJSON
loadProjectLocal: 從本地文件中加載3.0項(xiàng)目
downloadProjectId: 通過(guò)projectId,從storage中下載項(xiàng)目(storage封裝了本地和網(wǎng)絡(luò)加載巡通,并緩存)
saveProjectSb3: 導(dǎo)出3.0項(xiàng)目,zip的blob流
toJSON: 導(dǎo)出project.json
fromJSON: 從json中膛虫,加載項(xiàng)目(可加載2.0項(xiàng)目),
* 判斷2.0還是3.0的項(xiàng)目躏吊,3.0的項(xiàng)目包含meta字段氛改,2.0的項(xiàng)目有自己的特定格式schema.json。
* 調(diào)用各自的deserializer比伏,反序列化project.json
* 解析出所有的targets胜卤,調(diào)用installTargets安裝
installTargets: 安裝targets,targets可能來(lái)自與extension,如果是赁项,則先加載所有的extensions瑰艘,通過(guò)promise.all是鬼,等擴(kuò)展安裝之后,再安裝所有targets
addCostume: 增加一個(gè)costume
duplicateCostume: 復(fù)制costume
renameCostume: 重命名costume
deleteCostume: 刪除costume
getCostumeSvg: 獲取costume svg格式
updateSvg:
duplicateSound: 復(fù)制sound
addSound:
renameSound
deleteSound
getSoundBuffer: 從audio engine獲取一個(gè)sound buffer
addBackdrop:
addSprite2: 反序列化2.0的一個(gè)sprite紫新,并加載到當(dāng)前project
renameSprite
deleteSprite
duplicateSprite
attachAudioEngine: 關(guān)聯(lián)audio engine均蜜,gui項(xiàng)目中(gui.jsx)調(diào)用
attachRenderer: 關(guān)聯(lián)渲染器, gui項(xiàng)目中(stage.jsx)調(diào)用
attachStorage: 關(guān)聯(lián)存儲(chǔ)管理器, gui項(xiàng)目中(reducers/vm.js)調(diào)用
setLocale:多語(yǔ)言支持
setEditingTarget
shareBlocksToTarget: 當(dāng)從一個(gè)sprite拖拽到另一個(gè)sprite時(shí)調(diào)用
refreshWorkspace: 強(qiáng)制刷新
getTargetIdForDrawableId: 通過(guò)renderer的drawableid,反向獲取targetid
startDrag: 設(shè)置某target進(jìn)入drag mode(this. _dragTarget=target), gui項(xiàng)目中(stage.jsx)調(diào)用
stopDrag: 設(shè)置某target離開(kāi)drag mode(this. _dragTarget=null), gui項(xiàng)目中(stage.jsx)調(diào)用
postSpriteInfo: 向editing target or dragging target 發(fā)送sprite信息
event listener
blockListener:
flyoutBlockListener
monitorBlockListener
variableListener
emitTargetsUpdate:
emitWorkspaceUpdate