亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > 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代碼的相關信息資訊供網民參考!
  • 推薦文章
    日韩中文字幕在线播放| 亚洲天堂一区二区三区四区| 日韩专区亚洲综合久久| 99色视频在线观看| 中文字幕一区二区三区精彩视频| 99热视热频这里只有精品| 欧美a级片免费看| 青青青草影院 | 九九九在线视频| 成人免费观看视频| 午夜在线亚洲男人午在线| 国产不卡精品一区二区三区| 久久99青青久久99久久| 久久久久久久久综合影视网| 欧美a级片视频| 青青青草视频在线观看| 国产网站免费在线观看| 九九久久国产精品大片| 国产综合91天堂亚洲国产| 九九精品久久久久久久久| 精品久久久久久综合网| 九九九国产| 亚洲天堂免费| 国产a网| 国产一区二区精品| 久久99爰这里有精品国产| 午夜欧美成人香蕉剧场| 国产精品1024永久免费视频 | 国产视频网站在线观看| 欧美18性精品| 麻豆系列 在线视频| 国产精品1024永久免费视频| 二级特黄绝大片免费视频大片| 精品毛片视频| 日本特黄特色aaa大片免费| 日韩在线观看免费| 国产麻豆精品免费视频| 91麻豆tv| 国产91素人搭讪系列天堂| 可以在线看黄的网站| 国产综合91天堂亚洲国产| 欧美激情一区二区三区视频 | 99热热久久| 国产美女在线观看| 九九精品久久久久久久久| 精品久久久久久影院免费| 色综合久久久久综合体桃花网| 久久福利影视| 日韩中文字幕在线播放| 国产不卡精品一区二区三区| 午夜激情视频在线播放| 麻豆午夜视频| 欧美日本国产| 精品国产一区二区三区免费| 日本免费乱人伦在线观看 | 黄色免费三级| 国产激情一区二区三区| 天天做日日爱| 午夜家庭影院| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 99久久网站| 精品国产一区二区三区久久久蜜臀 | 香蕉视频三级| 欧美日本韩国| 国产伦精品一区二区三区在线观看| 美国一区二区三区| 亚洲不卡一区二区三区在线| 你懂的日韩| 日韩在线观看视频黄| 91麻豆国产福利精品| 亚洲精品久久久中文字| 久久国产精品自由自在| 国产美女在线一区二区三区| 亚欧成人乱码一区二区| 日韩在线观看免费完整版视频| 午夜欧美福利| 国产麻豆精品免费视频| 91麻豆精品国产自产在线观看一区 | 久久国产精品只做精品| 欧美激情一区二区三区视频 | 99色精品| 久久国产精品自由自在| 91麻豆精品国产片在线观看| 久久99青青久久99久久| 欧美一级视| 国产视频久久久久| 亚飞与亚基在线观看| 精品久久久久久综合网| 成人免费网站久久久| 天天做人人爱夜夜爽2020| 国产一区二区精品在线观看| 亚洲 激情| 黄视频网站免费| 亚洲精品永久一区| 中文字幕一区二区三区 精品| 久久国产精品自线拍免费| 欧美另类videosbestsex| 一级毛片视频播放| 久久国产影院| 国产精品1024永久免费视频 | 欧美日本国产| 国产不卡在线看| 99久久精品国产高清一区二区 | 精品国产三级a| 欧美a级片免费看| 成人高清视频免费观看| 欧美一级视频免费| 精品国产一区二区三区精东影业| 亚洲精品永久一区| 国产成人精品综合在线| 国产亚洲免费观看| 黄视频网站免费| 国产高清在线精品一区a| 欧美另类videosbestsex视频 | 999精品视频在线| 精品国产一区二区三区久久久狼 | 中文字幕一区二区三区 精品| 国产视频一区二区在线观看| 国产美女在线观看| 亚洲爆爽| 高清一级毛片一本到免费观看| 欧美国产日韩在线| 日韩欧美一及在线播放| 99热精品在线| 国产a网| 欧美a级v片不卡在线观看| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 91麻豆爱豆果冻天美星空| 九九干| 成人免费观看视频| 日韩avdvd| 国产视频在线免费观看| 久草免费在线观看| 欧美国产日韩在线| 四虎久久影院| 日韩专区亚洲综合久久| 精品视频在线看 | 麻豆网站在线免费观看| 精品视频免费看| 日韩一级黄色| 免费国产在线视频| 国产一区二区精品久| 国产亚洲精品成人a在线| 精品视频在线看 | 一级片免费在线观看视频| 99久久精品国产麻豆| 91麻豆精品国产高清在线| 免费国产在线视频| 国产高清视频免费观看| 日本在线不卡视频| 日韩女人做爰大片| 久久久久久久久综合影视网| 免费一级片网站| 亚洲女人国产香蕉久久精品| 久久久久久久网| 青青青草视频在线观看| 国产国产人免费视频成69堂| 韩国毛片 免费| 成人高清视频免费观看| 国产精品1024永久免费视频 | 亚洲第一页乱| 999精品在线| 日韩av东京社区男人的天堂| 精品在线免费播放| 国产麻豆精品免费密入口| 国产精品免费久久| 欧美日本免费| 免费一级生活片| 欧美一级视频免费| 国产高清在线精品一区二区| 国产国语在线播放视频| 一级片免费在线观看视频| 日韩中文字幕在线观看视频| 久久99这里只有精品国产| 亚洲第一页乱| 国产麻豆精品免费视频| 久久99中文字幕| 午夜欧美福利| 国产91精品系列在线观看| 精品国产三级a| 日韩avdvd| 欧美一级视| 日韩中文字幕在线播放| 精品国产三级a| 精品视频一区二区| 日韩一级精品视频在线观看| 精品视频免费看| 国产成人啪精品| 日本在线www| 国产精品自拍一区| 你懂的福利视频| 你懂的日韩| 九九九国产| 午夜激情视频在线播放| 二级特黄绝大片免费视频大片| a级精品九九九大片免费看| 欧美1卡一卡二卡三新区| 四虎影视精品永久免费网站| 欧美另类videosbestsex久久| 九九精品久久久久久久久|