婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

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

scratch3.0二次開發(fā)之用blocks生成python代碼

熱門標(biāo)簽:西青語音電銷機(jī)器人哪家好 南昌地圖標(biāo)注 無錫智能外呼系統(tǒng)好用嗎 百應(yīng)電話機(jī)器人總部 旅游廁所地圖標(biāo)注怎么弄 成都呼叫中心外呼系統(tǒng)哪家強(qiáng) 宿州電話機(jī)器人哪家好 地圖標(biāo)注與注銷 電梯新時(shí)達(dá)系統(tǒng)外呼顯示e

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

一、引入一個(gè)生成代碼的文件

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

這個(gè)生成代碼的文件是從Blockly引入進(jìn)來的,scratch-blocks是在blockly的基礎(chǔ)上開發(fā)出來的。現(xiàn)在的scratch-blocks是沒有g(shù)enerators目錄的,這個(gè)也可以從blockly那里copy過來。
具體分析blockly的python.js代碼:

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

python是blockl.generator的一個(gè)實(shí)例,會(huì)調(diào)用generator里的方法;

Blockly.Python.addReservedWords(...);

這方法的作用是給python添加關(guān)鍵字,blockly的python文件已經(jīng)設(shè)置了許多python的關(guān)鍵字在里面了。

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;             // (...)

以上代碼設(shè)置了優(yōu)先級。
Blockly.python的其他方法請參考blockly的python文件。

二、定義生成的python代碼

需要對每個(gè)block定義生成的代碼。

1、獲取block的type

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

以下是一個(gè)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、獲取參數(shù)的值

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

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

3、從xml來解析一個(gè)塊的組成結(jié)構(gòu)

這是motion_movesteps塊的xml結(jié)構(gòu),它由兩個(gè)block組成,"motion_movesteps"和“math_number”,shadow也是一個(gè)block;

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

所以除了上面已經(jīng)定義好的"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、根據(jù)塊的形狀來設(shè)置return的數(shù)據(jù)類型

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

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

三、生成python代碼

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

 this.workspace.addChangeListener(this.generatPythonCode);

四、結(jié)語

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

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

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

標(biāo)簽:贛州 渭南 七臺(tái)河 濰坊 辛集 西安 許昌 雅安

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《scratch3.0二次開發(fā)之用blocks生成python代碼》,本文關(guān)鍵詞  scratch3.0,二次開發(fā),之用,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《scratch3.0二次開發(fā)之用blocks生成python代碼》相關(guān)的同類信息!
  • 本頁收集關(guān)于scratch3.0二次開發(fā)之用blocks生成python代碼的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    色狠狠一区二区| 天堂久久久久va久久久久| 高清不卡在线观看| 欧美年轻男男videosbes| 久久精品一区蜜桃臀影院| 九一九一国产精品| 欧美色综合久久| 一区二区三区高清在线| 成人午夜免费视频| 国产精品国产三级国产普通话蜜臀| 日本不卡视频在线| 制服.丝袜.亚洲.另类.中文| 日韩电影一区二区三区四区| 3751色影院一区二区三区| 久久99久久久久| 久久品道一品道久久精品| 国产精品自在欧美一区| 国产精品亲子伦对白| 不卡av电影在线播放| 久久蜜桃av一区二区天堂| 国产精品一二三四| 国产欧美精品一区二区色综合 | 国产精品亚洲午夜一区二区三区| 欧美精品视频www在线观看| 国产一二三精品| 国产精品色呦呦| 色爱区综合激月婷婷| 日日嗨av一区二区三区四区| 欧美色精品在线视频| 国产精选一区二区三区| 伊人色综合久久天天| 91精品国产入口| 蜜桃精品视频在线| 国产精品网站在线播放| 91精品国产一区二区三区| 菠萝蜜视频在线观看一区| 极品美女销魂一区二区三区 | 亚洲成人综合网站| 国产三级精品三级在线专区| 欧美精品三级日韩久久| 成人高清免费在线播放| 美美哒免费高清在线观看视频一区二区 | 国产不卡在线一区| 日本欧美在线看| 一区二区三区精品在线观看| 国产精品视频一二| 精品久久久久av影院 | 久久精品国内一区二区三区 | 亚洲一区二区三区四区在线观看| 久久久美女毛片| 欧美一区二区三区不卡| 91亚洲国产成人精品一区二区三| 国产真实乱子伦精品视频| 免费不卡在线观看| 日韩精品一二三四| 一区二区三区蜜桃| 一区二区三区电影在线播| 亚洲人成网站影音先锋播放| 国产欧美综合在线| 久久精品视频免费| 2023国产精品自拍| 日韩欧美综合一区| 欧美午夜片在线看| 欧美日韩三级视频| 69久久夜色精品国产69蝌蚪网| 色综合久久综合网欧美综合网| 国产成人综合亚洲网站| 国产一区美女在线| 国产电影精品久久禁18| 不卡大黄网站免费看| 成人免费观看男女羞羞视频| 国产伦精品一区二区三区视频青涩| 久久97超碰国产精品超碰| 免费不卡在线视频| 亚洲综合网站在线观看| 亚洲福利视频一区二区| 免费成人在线观看| 国产风韵犹存在线视精品| 成人av在线资源| 欧美日韩中文字幕一区| 91麻豆精品国产自产在线观看一区| 欧美久久久一区| 欧美v亚洲v综合ⅴ国产v| 日本一区二区三区久久久久久久久不 | 中文字幕 久热精品 视频在线| 国产日韩欧美综合一区| 亚洲日穴在线视频| 肉色丝袜一区二区| 狠狠色伊人亚洲综合成人| 成人av电影观看| 欧美日本免费一区二区三区| 精品99一区二区三区| 国产精品福利一区| 亚洲电影一级片| 国产原创一区二区三区| 色域天天综合网| 日韩欧美区一区二| 欧美国产亚洲另类动漫| 日韩中文字幕av电影| 波波电影院一区二区三区| 欧美日韩在线精品一区二区三区激情| 美女网站色91| 宅男在线国产精品| 国产精品天美传媒沈樵| 日日摸夜夜添夜夜添亚洲女人| 国产精品1区2区3区在线观看| 在线观看区一区二| 久久久无码精品亚洲日韩按摩| 亚洲欧美自拍偷拍| 日日夜夜精品视频免费| 91首页免费视频| 久久蜜桃av一区二区天堂| 午夜精品福利一区二区蜜股av| 成人免费高清在线| 欧美精品一区二区三区高清aⅴ| 婷婷夜色潮精品综合在线| 99精品偷自拍| 国产精品青草综合久久久久99| 国内久久精品视频| 日韩三级免费观看| 日韩电影在线观看电影| 欧美日韩中文另类| 亚洲精品久久久蜜桃| 成人污污视频在线观看| 精品国产乱码久久久久久影片| 亚洲国产日韩av| 色婷婷av久久久久久久| 亚洲欧洲日产国产综合网| 国产一区二区免费视频| 精品久久久久久综合日本欧美| 亚洲主播在线观看| 成人av网站在线| 国产精品美女一区二区在线观看| 老司机免费视频一区二区| 日韩一区二区在线观看视频播放| 综合av第一页| 91影院在线观看| 亚洲欧美日韩国产综合| eeuss国产一区二区三区| 国产精品欧美一区喷水| 成人福利电影精品一区二区在线观看| 久久欧美一区二区| 国产麻豆9l精品三级站| 国产女主播一区| 国产福利一区二区三区| 国产女人18毛片水真多成人如厕 | 国产乱码精品一区二区三| 久久免费国产精品| 国产精品一区二区在线看| 欧美tk丨vk视频| 国产一区二区中文字幕| 国产无一区二区| 91美女视频网站| 亚洲动漫第一页| 欧美成人乱码一区二区三区| 国产一区二区伦理| 国产午夜三级一区二区三| 岛国精品一区二区| 亚洲精品久久嫩草网站秘色| 欧美美女黄视频| 黑人巨大精品欧美黑白配亚洲| 久久久不卡影院| 成人深夜福利app| 天天做天天摸天天爽国产一区 | 精品国一区二区三区| 国产一区 二区 三区一级| 1区2区3区欧美| 91偷拍与自偷拍精品| 一区二区三区中文字幕在线观看| 欧美日韩精品欧美日韩精品一 | 91久久精品一区二区三区| 无吗不卡中文字幕| 久久久久国产精品麻豆| 99视频在线观看一区三区| 亚洲综合清纯丝袜自拍| 911国产精品| 国产福利精品一区二区| 污片在线观看一区二区| 国产欧美va欧美不卡在线| 欧美日韩国产不卡| 波多野结衣中文一区| 午夜精品久久久久久不卡8050| 久久午夜羞羞影院免费观看| 91在线国产福利| 亚洲二区在线观看| 国产精品超碰97尤物18| 欧美一区二区三区在线看| 91香蕉视频在线| 丁香婷婷综合色啪| 美脚の诱脚舐め脚责91| 亚洲精品成人在线| 国产精品免费视频观看| 日韩欧美你懂的| 欧美高清dvd| 欧美无砖砖区免费| 日本大香伊一区二区三区| 91网上在线视频| 成人黄色免费短视频| 国产精品69毛片高清亚洲| 激情偷乱视频一区二区三区|