Scratch 2.0扩展console.log()输出位置及替代方案咨询(树莓派离线版)
树莓派Scratch 2.0离线版扩展日志查看方案
嘿,我来帮你搞定这个日志的问题!针对你用的scratch-flash ba2f624-dirty版本,分两种情况给你解决方案:
1. 查看console.log()的输出
因为树莓派上的Scratch 2离线版是基于Flash的桌面应用,它的console.log()不会显示在浏览器控制台里,而是会输出到启动Scratch的终端窗口里。具体操作步骤:
- 先关掉正在运行的Scratch编辑器
- 打开树莓派的终端(Terminal)
- 在终端里输入
scratch2(这是树莓派上启动Scratch 2的默认命令),回车启动Scratch - 现在加载你的实验性扩展,当代码触发
console.log()时,对应的输出就会实时显示在你刚才打开的终端窗口里了
2. Scratch界面内可见的替代日志方法
如果想在Scratch编辑器里直接看到日志内容,不用切换到终端,你可以利用Scratch的内置功能或者自定义积木来实现:
方法一:让角色“说出”日志内容
修改你的扩展代码,添加一段让舞台角色显示日志的逻辑,比如:
window.socket.onmessage = function (message) { var msg = JSON.parse(message.data); incomingMessages[event]=true; lastEventValue[event]=msg['value']; // 原来的终端日志输出 console.log(message.data); // 新增:让舞台第一个角色说出日志,持续2秒 const target = Scratch.targets[0]; if (target) { // 第二个参数是显示时长(毫秒),这里设为2000即2秒 target.say(message.data, 2000); } };
方法二:用全局变量存储日志
你可以创建一个全局变量来实时更新日志内容,这样用户能在舞台上直接看到变量的最新值:
window.socket.onmessage = function (message) { var msg = JSON.parse(message.data); incomingMessages[event]=true; lastEventValue[event]=msg['value']; console.log(message.data); // 查找或创建名为“日志内容”的全局变量 let logVar = Scratch.variables.get('日志内容'); if (!logVar) { // 如果变量不存在,创建全局变量 logVar = Scratch.variables.create('日志内容', '', 'global'); } // 更新变量值为当前日志 logVar.value = message.data; };
方法三:自定义日志积木
如果需要更灵活的日志控制,还可以在扩展里定义一个自定义积木,让用户能在Scratch脚本里主动调用查看日志:
// 先在扩展注册部分添加自定义积木 Scratch.extensions.register('你的扩展名称', { blocks: [ // 这里放你已有的积木定义... [' ', '显示日志 %s', 'showLog', '测试日志'] ], // 实现日志显示函数 showLog: function(text) { console.log(text); const target = Scratch.targets[0]; if (target) { target.say(text, 5000); // 显示5秒 } } }); // 然后在onmessage事件里调用这个函数 window.socket.onmessage = function (message) { var msg = JSON.parse(message.data); incomingMessages[event]=true; lastEventValue[event]=msg['value']; // 调用自定义日志积木 this.showLog(message.data); };
这样不管是用终端看原始输出,还是在Scratch界面内直接查看日志,都能满足你的需求啦!
内容的提问来源于stack exchange,提问作者JanVdA
相关产品推荐
相关产品推荐

