美文网首页
scratch-vm源码分析-开篇

scratch-vm源码分析-开篇

作者: M老师 | 来源:发表于2018-03-23 17:52 被阅读0次

    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,加速模式,循环不导致重绘
    setCompatibilityMode: runtime兼容模式,兼容2.0,30TPS
    clear: runtime.clear. 清除project data
    getPlaygroundData: 获取editingTarget所在的thread里的data
    postIOData: runtime.ioDevice['device_name'].postData,向runtime中的设备发送数据
    loadProject: 直接调用fromJSON
    loadProjectLocal: 从本地文件中加载3.0项目
    downloadProjectId: 通过projectId,从storage中下载项目(storage封装了本地和网络加载,并缓存)
    saveProjectSb3: 导出3.0项目,zip的blob流
    toJSON: 导出project.json
    fromJSON: 从json中,加载项目(可加载2.0项目),
    * 判断2.0还是3.0的项目,3.0的项目包含meta字段,2.0的项目有自己的特定格式schema.json。
    * 调用各自的deserializer,反序列化project.json
    * 解析出所有的targets,调用installTargets安装

    installTargets: 安装targets,targets可能来自与extension,如果是,则先加载所有的extensions,通过promise.all,等扩展安装之后,再安装所有targets

    addCostume: 增加一个costume
    duplicateCostume: 复制costume
    renameCostume: 重命名costume
    deleteCostume: 删除costume
    getCostumeSvg: 获取costume svg格式
    updateSvg:
    duplicateSound: 复制sound
    addSound:
    renameSound
    deleteSound
    getSoundBuffer: 从audio engine获取一个sound buffer
    addBackdrop:
    addSprite2: 反序列化2.0的一个sprite,并加载到当前project
    renameSprite
    deleteSprite
    duplicateSprite

    attachAudioEngine: 关联audio engine,gui项目中(gui.jsx)调用
    attachRenderer: 关联渲染器, gui项目中(stage.jsx)调用
    attachStorage: 关联存储管理器, gui项目中(reducers/vm.js)调用

    setLocale:多语言支持
    setEditingTarget
    shareBlocksToTarget: 当从一个sprite拖拽到另一个sprite时调用
    refreshWorkspace: 强制刷新
    getTargetIdForDrawableId: 通过renderer的drawableid,反向获取targetid
    startDrag: 设置某target进入drag mode(this. _dragTarget=target), gui项目中(stage.jsx)调用
    stopDrag: 设置某target离开drag mode(this. _dragTarget=null), gui项目中(stage.jsx)调用
    postSpriteInfo: 向editing target or dragging target 发送sprite信息


    event listener

    blockListener:
    flyoutBlockListener
    monitorBlockListener
    variableListener

    emitTargetsUpdate:
    emitWorkspaceUpdate

    相关文章

      网友评论

          本文标题:scratch-vm源码分析-开篇

          本文链接:https://www.haomeiwen.com/subject/fcwxcftx.html