詳解scratch3.0二次開發(fā)之scratch-blocks中的blocks的類型、定義和使用方法
scratch-blocks是scratch-gui依賴的一個(gè)基本模塊。它的作用是生成gui界面上的blocks。(有關(guān)scratch-blocks的方法可以看我上一篇博客《scratch3.0二次開發(fā)之scratch-blocks的免編譯修改方法》)。blocks的作用是通過拖曳的方法組成blocks堆塊,點(diǎn)擊greenflag控件,舞臺(tái)區(qū)(stage)會(huì)有相應(yīng)的變化。
scratch-gui的blocks的生成文件在scratch-blocks\blocks_vertical里。
blocks幾種形狀
blocks塊的形狀有以下幾種:
塊 | 形狀名稱 |
---|---|
![]() |
shape_statement |
![]() |
shape_hat |
![]() |
shape_end |
![]() |
shape_statement |
![]() |
output_boolean |
![]() |
output_number |
![]() |
output_string |
一個(gè)blocks塊的定義
比如一個(gè)右轉(zhuǎn)多少度的塊
定義塊的代碼:
Blockly.Blocks['motion_turnright'] = { /** * Block to turn right. * @this Blockly.Block */ init: function() { this.jsonInit({ "message0": “右轉(zhuǎn) %1 %2 度”, "args0": [ { "type": "field_image", "src": Blockly.mainWorkspace.options.pathToMedia + "rotate-right.svg", "width": 24, "height": 24 }, { "type": "input_value", "name": "DEGREES" } ], "category": Blockly.Categories.motion,//塊歸屬的類,這里是運(yùn)動(dòng)類。 "extensions": ["colours_motion", "shape_statement"] }); } };
“message0“:表示塊里顯示的字符串,%1,%2表示塊里的字段field,塊里有1個(gè)field是%1,有兩個(gè)field是按先后順序設(shè)為%1,%2,以此類推,
”args0”:里面的數(shù)組元素對(duì)應(yīng)上面設(shè)置的field,args0[0]對(duì)應(yīng)%1,args0[1]對(duì)應(yīng)%2,…。每個(gè)元素對(duì)象表示設(shè)置了的field的類型。
“extensions”:"colours_motion"設(shè)置塊的顏色,"shape_statement"設(shè)置了塊的形狀;
blocks塊的使用
定義好的block塊,使用的時(shí)候要把加到xml文件里,文件地址:scratch-gui\src\lib\make-toolbox-xml.js,找到對(duì)應(yīng)的類,這里是motion.
<block type="motion_turnright"> <value name="DEGREES"> <shadow type="math_number"> <field name="NUM">15</field> </shadow> </value> </block>
motion_turnright 這是剛定義好的塊。value 標(biāo)簽中的name,表示變量名,在scratch-vm里面會(huì)用到,shadow標(biāo)簽這段表示預(yù)先設(shè)置的值,也是預(yù)先設(shè)置的塊。去掉value這段代碼
<block type="motion_turnright"> </block>
它顯示成這樣:
scratch-blocks的編譯
scratch-blocks修改后的文件,只有編譯壓縮后才能生效。但是按照官方的方法,windows下很難編譯成功。如果是定義blocks塊,可以參考上篇博客里介紹的方法《scratch3.0二次開發(fā)之scratch-blocks的免編譯修改方法》
補(bǔ)充
下面看下scratch3.0二次開發(fā)之blocks生成代碼思路
總的思路:
- 引入一個(gè)生成代碼的文件,比如要生成arduino代碼,就要引入生成arduino代碼的文件,要生成python代碼,就要引入python文件。
- 如果scratch-block中沒有自己要的blocks塊,就定義一個(gè)blocks塊用來生成代碼。(生成的方法可以看我之前的文章《[scratch3.0二次開發(fā)之scratch-blocks中的blocks的類型、定義和使用方法])》
- 給每個(gè)blocks定義要生成的代碼。
- 把生成代碼的代碼blocks塊加入make-toolbox-xml 中。
- 在gui中設(shè)置一個(gè)代碼編輯區(qū),用來顯示生成的代碼。
到此這篇關(guān)于scratch3.0二次開發(fā)之scratch-blocks的免編譯修改方法的文章就介紹到這了,更多相關(guān)scratch blocks的免編譯內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用VSCode如何從github拉取項(xiàng)目的實(shí)現(xiàn)
這篇文章主要介紹了使用VSCode如何從github拉取項(xiàng)目的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08VSCode讓終端默認(rèn)在當(dāng)前文件的路徑啟動(dòng)(方法推薦)
這篇文章主要介紹了VSCode中如何讓終端默認(rèn)在當(dāng)前文件的路徑啟動(dòng),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03使用HTTP_X_FORWARDED_FOR獲取客戶端IP的嚴(yán)重后果
我的建議是不要再使用上面的方法去獲取客戶端IP.即是不要再理會(huì)代理情況.2009-11-11高性能WEB開發(fā) JS、CSS的合并、壓縮、緩存管理
本篇文章主要討論下目前JS,CSS 合并、壓縮、緩存管理存在的一些問題,然后分享下自己項(xiàng)目中用到的1個(gè)處理方案,并提供1個(gè)實(shí)例下載。2010-05-05快速設(shè)置IDEA代碼風(fēng)格為Google風(fēng)格
這篇文章主要介紹了快速設(shè)置IDEA代碼風(fēng)格為Google風(fēng)格,使用Google風(fēng)格format的圖文教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-11-11使用動(dòng)畫實(shí)現(xiàn)微信讀書的換一批效果(兩種方式)
這篇文章主要介紹了使用動(dòng)畫實(shí)現(xiàn)微信讀書的換一批效果,本文通過實(shí)例代碼通過兩種方式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05