【技术贴】让sc3作品与外部页面交互
scratch吧
全部回复
仅看楼主
level 8
让sc3作品与外部页面交互
(但仅限于用htmlifier转化为html文件的sc3作品
(且仅可与同一站点内页面交互
2020年03月08日 12点03分 1
level 8
大家都知道,在htmlifier里,有个选项可以将云变量的值存储到localstorage(其实相当于本地缓存)
在htmlifier的一段源码(图1)的第478行,看得出,html文件在存储localstorage时,变量名是"[s3] "加上云变量名称
在作品解压后的json文件(图2)里,可以发现云变量都是"☁ cloud1"的形式
因此,作品存储的localstorage的变量名都是"[s3] ☁ cloud1"的形式
所以在加载作品前改变localstorage的值可以引起作品内云变量值相应的改变
2020年03月08日 12点03分 2
level 8
为了测试作品运行中能否在外部改变云变量值,我编写了如下图的代码
这段代码预计会使cloud1的值在一开始为114154,等待五秒后变为1919810
然后预期实现了!cloud1真的从114514变为1919810了[滑稽]
显而易见,sc3作品运行内部也能随时改变云变量及其在localstorage里的值
因此,sc3作品能通过云变量的localstorage这个途径与外部页面传值(即进行数据交互)![滑稽]
2020年03月08日 12点03分 3
level 8
作品与外界交互可以干许多有趣的事情
比如页面获取窗口长宽后传到作品里,让作品改变布局,从而实现自适应窗口的作品[滑稽]
或者页面不停获取游戏作品内玩家坐标等后上传到云数据库从而实现多人联机(不就相当于普通的云变量(不过不用注册scratch等账号[滑稽](甚至可以在游戏内自己建一个账号系统[滑稽]))
2020年03月08日 12点03分 4
level 8
关于localstorage
localstorage在同一站点同一子域名同一协议下是共享的,所以同一个网站下放的sc3制作的h5作品不要使用相同的云变量名
localstorage每个变量最大大小为5M,默认以字符串形式存储(应该够用[滑稽])
用好localstorage应该要去学学JavaScript?
作品与外部页面能交互这一发现似乎更加提升了scratch的潜力[滑稽](说句题外话,我在github上面发现了似乎是sc3的box2d拓展[滑稽]然而不会用。。)
2020年03月08日 13点03分 5
level 8
我是不是没怎么说清楚[滑稽]。。那
总结:
sc作品内部以"☁ cloud1"为变量名的云变量html化后以"[s3] ☁ cloud1"为名存储在localstorage中
外部页面改变localstorage会使得sc作品内(云)变量相应改变
sc作品内改变(云)变量同理会使得localstorage相应改变
外部页面与sc作品可以通过上述方式进行传值
2020年03月08日 13点03分 6
level 8
都没人发表个评论啥的吗[滑稽][心碎]。。
2020年03月08日 14点03分 7
level 11
[滑稽][心碎]想法很好, 但是我相信除了会的, 基本没人能听懂 (技术贴的痛
2020年03月08日 15点03分 8
所以我又发了个演示视频[滑稽](拍的一个十分简陋的演示程序)
2020年03月09日 07点03分
level 9
你的htmlifier啥版本的[滑稽]我有个汉化离线版你可以改下[滑稽]
2020年03月09日 08点03分 9
在线版[滑稽]emm似乎离线版比在线版少了些功能
2020年03月09日 09点03分
@我不知道我不知道 少了一个更改分辨率,好像就没少别的了
2020年03月09日 09点03分
@双卡双开 更改分辨率很有用的啊[滑稽]可以做高清作品
2020年03月09日 09点03分
@我不知道我不知道 那你创作的时候不是还是得忍受480x360[滑稽]
2020年03月09日 09点03分
level 11
没读懂,读的时候被大粪臭晕了[阴险]
2020年03月09日 15点03分 10
level 13
看似乎是看明白了,但是不会JAVA不敢改[滑稽][心碎]
2020年03月09日 23点03分 11
1