校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > scratch3.0二次開發之用blocks生成python代碼

scratch3.0二次開發之用blocks生成python代碼

熱門標簽:西青語音電銷機器人哪家好 南昌地圖標注 無錫智能外呼系統好用嗎 百應電話機器人總部 旅游廁所地圖標注怎么弄 成都呼叫中心外呼系統哪家強 宿州電話機器人哪家好 地圖標注與注銷 電梯新時達系統外呼顯示e

在開始之前,先回顧下之前寫的文章《scratch3.0二次開發之blocks生成代碼思路》,在文章里大概地寫了生成代碼的幾個步驟,讀者看了可能還不太理解,這是根據我的開發經驗寫出來的。現在具體寫寫實現的方法。

一、引入一個生成代碼的文件

比如要生成arduino代碼,就要引入生成arduino代碼的文件,要生成python代碼,就要引入python文件。

這個生成代碼的文件是從Blockly引入進來的,scratch-blocks是在blockly的基礎上開發出來的。現在的scratch-blocks是沒有generators目錄的,這個也可以從blockly那里copy過來。
具體分析blockly的python.js代碼:

Blockly.Python = new Blockly.Generator('Python');

python是blockl.generator的一個實例,會調用generator里的方法;

Blockly.Python.addReservedWords(...);

這方法的作用是給python添加關鍵字,blockly的python文件已經設置了許多python的關鍵字在里面了。

Blockly.Python.ORDER_ATOMIC = 0;            // 0 "" ...
Blockly.Python.ORDER_COLLECTION = 1;        // tuples, lists, dictionaries
Blockly.Python.ORDER_STRING_CONVERSION = 1; // `expression...`
Blockly.Python.ORDER_MEMBER = 2.1;          // . []
Blockly.Python.ORDER_FUNCTION_CALL = 2.2;   // ()
Blockly.Python.ORDER_EXPONENTIATION = 3;    // **
Blockly.Python.ORDER_UNARY_SIGN = 4;        // + -
Blockly.Python.ORDER_BITWISE_NOT = 4;       // ~
Blockly.Python.ORDER_MULTIPLICATIVE = 5;    // * / // %
Blockly.Python.ORDER_ADDITIVE = 6;          // + -
Blockly.Python.ORDER_BITWISE_SHIFT = 7;     //  >>
Blockly.Python.ORDER_BITWISE_AND = 8;       // 
Blockly.Python.ORDER_BITWISE_XOR = 9;       // ^
Blockly.Python.ORDER_BITWISE_OR = 10;       // |
Blockly.Python.ORDER_RELATIONAL = 11;       // in, not in, is, is not,
                                            //     , =, >, >=, >, !=, ==
Blockly.Python.ORDER_LOGICAL_NOT = 12;      // not
Blockly.Python.ORDER_LOGICAL_AND = 13;      // and
Blockly.Python.ORDER_LOGICAL_OR = 14;       // or
Blockly.Python.ORDER_CONDITIONAL = 15;      // if else
Blockly.Python.ORDER_LAMBDA = 16;           // lambda
Blockly.Python.ORDER_NONE = 99;             // (...)

以上代碼設置了優先級。
Blockly.python的其他方法請參考blockly的python文件。

二、定義生成的python代碼

需要對每個block定義生成的代碼。

1、獲取block的type

block是根據type來區分的,每個block的type是唯一的。scratch-blocks的基本blocks的定義是在scratch-blocks\blocks_vertical目錄里。
具體可以查閱之前的博客《scratch3.0二次開發之scratch-blocks中的blocks的類型、定義和使用方法》

以下是一個type為“motion_movesteps”的block塊的定義

Blockly.Blocks['motion_movesteps'] = {
  /**
   * Block to move steps.
   * @this Blockly.Block
   */
  init: function() {
    this.jsonInit({
      "message0": Blockly.Msg.MOTION_MOVESTEPS,
      "args0": [
        {
          "type": "input_value",
          "name": "STEPS"
        }
      ],
      "category": Blockly.Categories.motion,
      "extensions": ["colours_motion", "shape_statement"]
    });
  }
};

定義生成的python語句:

 Blockly.Python['motion_movesteps'] = function (block) {
        var steps = Blockly.Python.valueToCode(block, "STEPS", Blockly.Python.ORDER_NONE);
        return 'move ' + steps + ' steps\n';
    };

2、獲取參數的值

根據參數的類型,選擇Blockly.Python.valueToCode、block.getFieldValue還是Blockly.Python.statementToCode來獲取值。

type類型 方法
input_value Blockly.Python.valueToCode
input_statement Blockly.Python.statementToCode
field_* block.getFieldValue

3、從xml來解析一個塊的組成結構

這是motion_movesteps塊的xml結構,它由兩個block組成,"motion_movesteps"和“math_number”,shadow也是一個block;

block type="motion_movesteps">
            value name="STEPS">
                shadow type="math_number">
                    field name="NUM">10/field>
                /shadow>
            /value>
        /block>

所以除了上面已經定義好的"motion_movesteps"生成python語句,還需要的定義math_number的生成語句

Blockly.Python['math_number'] = function(block) {
  // Numeric value.
  var code = parseFloat(block.getFieldValue('NUM'));
  var order;
  if (code == Infinity) {
    code = 'float("inf")';
    order = Blockly.Python.ORDER_FUNCTION_CALL;
  } else if (code == -Infinity) {
    code = '-float("inf")';
    order = Blockly.Python.ORDER_UNARY_SIGN;
  } else {
    order = code  0 ? Blockly.Python.ORDER_UNARY_SIGN :
            Blockly.Python.ORDER_ATOMIC;
  }
  return [code, order];
}

4、根據塊的形狀來設置return的數據類型

形狀 return的類型
字符串
字符串
[code, order] 數組
[code, order] 數組

引入模塊:Blockly.Python.definitions_[模塊名] = ”import xxxx";
聲明函數:Blockly.Python.definitions_[模塊名] = ”def xxx …";

三、生成python代碼

在scratch-gui/src/containers/block.jsx文件中,對workspace添加監聽

 this.workspace.addChangeListener(this.generatPythonCode);

四、結語

本文主要介紹了blocks生成python代碼的方法,由于篇幅有限,寫的也不是很全面,不過大概地生成方法也就這些。如果在開發地過程中碰到問題,可以私信我給我留言,我盡可能地幫助大家解決問題

到此這篇關于scratch3.0二次開發之用blocks生成python代碼的文章就介紹到這了,更多相關scratch blocks生成python代碼內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 詳解scratch3.0二次開發之scratch-blocks中的blocks的類型、定義和使用方法
  • Scratch3.0二次開發之windows環境下打包成exe的流程
  • Scratch3.0 頁面初始化同時加載sb3文件的操作代碼
  • 解析scratch3.0二次開發之scratch-blocks免編譯修改問題

標簽:贛州 渭南 七臺河 濰坊 辛集 西安 許昌 雅安

巨人網絡通訊聲明:本文標題《scratch3.0二次開發之用blocks生成python代碼》,本文關鍵詞  scratch3.0,二次開發,之用,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《scratch3.0二次開發之用blocks生成python代碼》相關的同類信息!
  • 本頁收集關于scratch3.0二次開發之用blocks生成python代碼的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    国内欧美视频一区二区| 免费在线观看视频一区| 亚洲一区免费观看| 香蕉成人伊视频在线观看| 一区二区免费看| 日韩在线播放一区二区| 久久激五月天综合精品| 国产精品一线二线三线| 成人国产亚洲欧美成人综合网| 粉嫩av亚洲一区二区图片| fc2成人免费人成在线观看播放 | 播五月开心婷婷综合| 不卡视频一二三| 欧美日韩高清影院| 国产亚洲自拍一区| 一区二区三区日本| 韩日精品视频一区| 国产成人午夜视频| 56国语精品自产拍在线观看| 久久人人爽人人爽| 亚洲国产成人va在线观看天堂| 奇米一区二区三区| 91网站最新地址| 欧美精品乱码久久久久久| 久久久久久久久蜜桃| 天天影视色香欲综合网老头| 国产精品一二三| 日韩亚洲电影在线| 欧美日韩国产片| 亚洲精品日韩综合观看成人91| 国产成人亚洲综合a∨婷婷| 欧美日韩二区三区| 亚洲影视在线播放| 91国产免费观看| 亚洲精品成人精品456| 成人av网在线| 中文字幕中文在线不卡住| 国产原创一区二区三区| 精品日韩欧美在线| 老汉av免费一区二区三区| 欧美裸体一区二区三区| 午夜精品久久久久久久久| 欧美吻胸吃奶大尺度电影 | 97se亚洲国产综合在线| 国产精品久久久久影视| 91麻豆文化传媒在线观看| 中文字幕在线观看不卡视频| 国产福利91精品| 一区二区三区在线观看欧美| 色综合色狠狠综合色| 亚洲图片欧美一区| 欧美肥大bbwbbw高潮| 日本三级亚洲精品| 亚洲国产高清在线| 欧美日本在线播放| 老司机精品视频在线| 一色桃子久久精品亚洲| 91久久久免费一区二区| 日本欧美肥老太交大片| 国产精品私人自拍| 欧美日韩一区二区三区在线看| 丝袜美腿亚洲综合| 国产精品久久久久影院亚瑟| 欧美午夜精品久久久久久超碰 | 精品88久久久久88久久久| 91视频一区二区| 国产精品一区二区久激情瑜伽| 亚洲欧洲中文日韩久久av乱码| 91麻豆精品久久久久蜜臀| 国产91精品欧美| 日本欧美韩国一区三区| 亚洲综合色成人| 国产精品久久久久久久久免费相片 | 岛国av在线一区| 男人的天堂久久精品| 亚洲在线免费播放| 亚洲欧美另类图片小说| 亚洲国产精品国自产拍av| 日韩天堂在线观看| 777久久久精品| 欧美精品日韩综合在线| 亚洲一区二区美女| 一区二区三区在线免费视频| 亚洲欧美视频在线观看视频| 国产精品全国免费观看高清 | 一本在线高清不卡dvd| 青青草国产精品97视觉盛宴| 777久久久精品| 91成人在线免费观看| 国产乱码精品1区2区3区| 国产精品美女久久久久aⅴ| 欧美成人video| 精品电影一区二区三区| 欧美三级日韩三级| 欧美三级中文字幕| 欧美无乱码久久久免费午夜一区 | 色综合久久综合网97色综合| 91蝌蚪porny| 国产成人av网站| 国产一区美女在线| 成人午夜私人影院| 在线看不卡av| 久久―日本道色综合久久| 国产精品久99| 青青青伊人色综合久久| 国产精品资源站在线| 色婷婷综合久久久中文字幕| 日韩一区二区电影在线| 国产精品黄色在线观看| 亚洲一区二区三区自拍| 国产一区免费电影| 69堂精品视频| 亚洲婷婷综合色高清在线| 久久国产乱子精品免费女| 成人的网站免费观看| 日韩欧美国产精品一区| 亚洲欧美另类久久久精品2019 | 久久99精品久久久久| www.日韩大片| 久久久久久久久久电影| 日韩va亚洲va欧美va久久| 99久久99久久久精品齐齐| 国产无人区一区二区三区| 老鸭窝一区二区久久精品| 欧美性生活久久| 亚洲视频中文字幕| av在线不卡网| 国产精品视频看| 99精品视频在线免费观看| 国产精品久久久久久久久搜平片| 成人午夜av影视| 最新热久久免费视频| 成人av中文字幕| 亚洲欧洲日韩在线| 91首页免费视频| 一区二区三区四区激情| 欧美日韩在线播| 老鸭窝一区二区久久精品| 久久综合色综合88| 波多野结衣欧美| 亚洲成a人v欧美综合天堂下载| 7777精品伊人久久久大香线蕉完整版| 五月婷婷激情综合网| 精品久久久久久综合日本欧美| 国产精品一区二区久久精品爱涩| 久久精品男人天堂av| 色婷婷综合久久久久中文| 天天操天天综合网| 欧美经典三级视频一区二区三区| 91在线视频免费91| 另类专区欧美蜜桃臀第一页| 久久久不卡网国产精品一区| 在线亚洲一区观看| 国精产品一区一区三区mba桃花| **网站欧美大片在线观看| 欧美性猛交xxxx黑人交| 丁香桃色午夜亚洲一区二区三区| 一区二区三区在线免费视频| 久久新电视剧免费观看| 欧美日韩一区二区三区不卡| 国产成人精品www牛牛影视| 午夜精品在线看| 久久综合九色综合久久久精品综合| av在线不卡免费看| 激情文学综合插| 蜜臀久久99精品久久久久久9| 国产精品毛片高清在线完整版| 91精品国产色综合久久ai换脸| 91在线视频播放| 91亚洲国产成人精品一区二三 | 国产精品美女久久久久久久 | 国产做a爰片久久毛片| 人人超碰91尤物精品国产| 亚洲一区二区欧美激情| 亚洲国产你懂的| 亚洲成人免费电影| 一区二区三区四区激情| 一区二区三区四区不卡视频 | 成人教育av在线| 91女厕偷拍女厕偷拍高清| 高清视频一区二区| 91麻豆精品秘密| 欧美日韩免费电影| 91精品国产手机| 久久精品夜夜夜夜久久| 欧美激情一区二区三区蜜桃视频| 综合久久久久久| 日韩电影免费一区| 国产馆精品极品| 91麻豆国产福利在线观看| 欧美日韩在线精品一区二区三区激情| 欧美专区在线观看一区| 精品国产免费人成在线观看| 欧美激情中文字幕一区二区| 艳妇臀荡乳欲伦亚洲一区| 奇米一区二区三区av| jlzzjlzz欧美大全| 精品国产自在久精品国产| 亚洲欧洲日产国产综合网| 久久国产三级精品|