mota-js/_server/blockly/motaActionBlockyDemo.html
YouWei Zhao 6ea6bea7a7 blockly
_server/blockly/motaActionBlockyDemo.html
实现了文档中 choices: 给用户提供选项 中的复杂事件
2018-01-24 22:14:09 +08:00

558 lines
26 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>MotaAction Blockly Demo</title>
<!-- <script src="../../blockly_compressed.js"></script>
<script src="../../blocks_compressed.js"></script>
<script src="../../javascript_compressed.js"></script>
<script src="../../msg/js/zh-hans.js"></script> -->
<!-- <script src="../../msg/js/en.js"></script> -->
<script src="blockly_compressed.js"></script>
<script src="blocks_compressed.js"></script>
<script src="javascript_compressed.js"></script>
<script src="zh-hans.js"></script>
<script src="motaActionBlocks.js"></script>
<style>
body {
background-color: #fff;
font-family: sans-serif;
}
</style>
</head>
<body>
<!-- =========================================================== -->
<p>
<button onclick="showXML()">Show XML</button>
<!-- <button onclick="runCode()">Run JavaScript</button> -->
<button onclick="runCode()">console.log(obj=code)</button>
</p>
<div id="blocklyDiv" style="height: 480px; width: 940px;"></div>
<pre id="codeArea"></pre>
<!-- =========================================================== -->
<xml id="toolboxxx" style="display: none">
<category name="类别" expanded="true">
<category name="events"></category>
<category name="changefloor"></category>
</category>
<sep gap="200"></sep>
<category name="default">
<block type="controls_if"></block>
<block type="logic_compare"></block>
<block type="controls_repeat_ext"></block>
<block type="math_number"></block>
<block type="math_arithmetic"></block>
<block type="text"></block>
<block type="text_print"></block>
</category>
<category name="new"></category>
<category name="变量" expanded="true">
<!-- <category name="status" custom="MY_VARIABLE"></category> -->
<category name="item"></category>
<category name="flag">
<!-- <block type="flagvar"></block> -->
</category>
</category>
<category name="事件例子">
<block type="math_number" disabled="true">
<field name="NUM">42</field>
</block>
<sep gap="200"></sep>
<label text="这是一个循环的例子"></label>
<block type="controls_for">
<value name="FROM">
<block type="math_number">
<field name="NUM">1</field>
</block>
</value>
<value name="TO">
<block type="math_number">
<field name="NUM">10</field>
</block>
</value>
<value name="BY">
<block type="math_number">
<field name="NUM">1</field>
</block>
</value>
</block>
<block type="math_arithmetic">
<field name="OP">ADD</field>
<value name="A">
<shadow type="math_number">
<field name="NUM">1</field>
</shadow>
</value>
<value name="B">
<shadow type="math_number">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</category>
<!-- <category name="Variables" colour="330" custom="VARIABLE"></category>
<category name="Functions" colour="290" custom="PROCEDURE"></category> -->
</xml>
<xml xmlns="http://www.w3.org/1999/xhtml" id="toolbox_source" style="display: none;">
<block type="math_number">
<field name="NUM">0</field>
</block>
<block type="math_arithmetic">
<field name="OP">ADD</field>
<value name="A">
<shadow type="math_number">
<field name="NUM">1</field>
</shadow>
</value>
<value name="B">
<shadow type="math_number">
<field name="NUM">1</field>
</shadow>
</value>
</block>
<block type="logic_compare">
<field name="OP">EQ</field>
</block>
<block type="logic_operation">
<field name="OP">AND</field>
</block>
<block type="logic_negate"></block>
<block type="evalstring_e">
<field name="EvalString">EvalString</field>
</block>
<block type="evalstring_all_e">
<field name="IdString">status</field>
<field name="EvalString">hp</field>
</block>
<block type="evalstring_all_e">
<field name="IdString">item</field>
<field name="EvalString">yellowKey</field>
</block>
<block type="evalstring_all_e">
<field name="IdString">flag</field>
<field name="EvalString">abc</field>
</block>
<block type="event_m">
<statement name="actionList">
<block type="actionlist"></block>
</statement>
</block>
<block type="actionlist"></block>
<block type="text_s_1">
<field name="Evalstring">欢迎使用事件编辑器</field>
</block>
<block type="text_s_2">
<field name="EvalString">小妖精</field>
<field name="IdString">fairy</field>
<field name="Evalstring_1">欢迎使用事件编辑器</field>
</block>
<block type="tip_s">
<field name="EvalString">这段话将在左上角以气泡形式显示</field>
</block>
<block type="setvalue_s">
<value name="EvalString">
<block type="evalstring_all_e">
<field name="IdString">status</field>
<field name="EvalString">hp</field>
</block>
</value>
<value name="EvalString_1">
<block type="math_arithmetic">
<field name="OP">ADD</field>
<value name="A">
<block type="evalstring_all_e">
<field name="IdString">status</field>
<field name="EvalString">hp</field>
</block>
</value>
<value name="B">
<shadow type="math_number">
<field name="NUM">100</field>
</shadow>
</value>
</block>
</value>
</block>
<block type="show_s">
<field name="INT">0</field>
<field name="INT_1">0</field>
<field name="IdString"></field>
<field name="INT_2"></field>
</block>
<block type="hide_s">
<field name="INT"></field>
<field name="INT_1"></field>
<field name="IdString"></field>
<field name="INT_2"></field>
</block>
<block type="trigger_s">
<field name="INT">0</field>
<field name="INT_1">0</field>
</block>
<block type="revisit_s"></block>
<block type="exit_s"></block>
<block type="update_s"></block>
<block type="sleep_s">
<field name="INT">500</field>
</block>
<block type="battle_s">
<field name="IdString">greenSlime</field>
</block>
<block type="opendoor_s">
<field name="INT">0</field>
<field name="INT_1">0</field>
<field name="IdString"></field>
</block>
<block type="changefloor_s">
<field name="IdString">MT1</field>
<field name="INT">0</field>
<field name="INT_1">0</field>
<field name="EvalString"></field>
<field name="INT_2"></field>
</block>
<block type="changepos_s_1">
<field name="INT">0</field>
<field name="INT_2">0</field>
<field name="EvalString"></field>
</block>
<block type="changepos_s_2">
<field name="EvalString">up</field>
</block>
<block type="openshop_s">
<field name="IdString">shop1</field>
</block>
<block type="disableshop_s">
<field name="IdString">shop1</field>
</block>
<block type="setfg_s_1">
<field name="INT">255</field>
<field name="INT_1">255</field>
<field name="INT_2">255</field>
<field name="EvalString">1</field>
<field name="INT_3"></field>
</block>
<block type="setfg_s_2">
<field name="INT"></field>
</block>
<block type="move_s">
<field name="INT"></field>
<field name="INT_1"></field>
<field name="INT_2"></field>
<field name="EvalString">TRUE</field>
<field name="EvalString_1">上右3下2左上左2</field>
</block>
<block type="movehero_s">
<field name="INT"></field>
<field name="EvalString">上右3下2左上左2</field>
</block>
<block type="playbgm_s">
<field name="EvalString">bgm.mp3</field>
</block>
<block type="pausebgm_s"></block>
<block type="resumebgm_s"></block>
<block type="playsound_s">
<field name="EvalString">item.ogg</field>
</block>
<block type="win_s">
<field name="EvalString"></field>
</block>
<block type="lose_s">
<field name="EvalString"></field>
</block>
<block type="if_s">
<value name="EvalString">
<block type="logic_compare">
<field name="OP">GT</field>
<value name="A">
<block type="evalstring_all_e">
<field name="IdString">status</field>
<field name="EvalString">hp</field>
</block>
</value>
<value name="B">
<shadow type="math_number">
<field name="NUM">100</field>
</shadow>
</value>
</block>
</value>
<statement name="actionList">
<block type="actionlist"></block>
</statement>
<statement name="actionList_1">
<block type="actionlist"></block>
</statement>
</block>
<block type="choices_s">
<field name="EvalString">提示文字:选择一种钥匙</field>
<statement name="choicesContextList">
<block type="choicescontext">
<field name="EvalString">提示文字:黄钥匙</field>
<statement name="actionList">
<block type="actionlist"></block>
</statement>
<next>
<block type="choicescontext">
<field name="EvalString">提示文字:蓝钥匙</field>
<statement name="actionList">
<block type="actionlist"></block>
</statement>
<next>
<block type="choicescontext">
<field name="EvalString">提示文字:红钥匙</field>
<statement name="actionList">
<block type="actionlist"></block>
</statement>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
<block type="function_s">
<field name="EvalString">alert(core.getStatus("atk"));</field>
</block>
</xml>
<xml id="toolbox" style="display: none"><category name="未分类"></category></xml>
<script>
//不允许缺省的标记
/*
INT_CHECK = '999843861743683';
IdString_CHECK = 'this_id_must_be_inputted';
EvalString_CHECK = 'this_value_must_be_inputted';
*/
var moveStepParser = moveStepParser_2ac833aa_9115_48fc_b816_08cc229bb4d0;
var motaActionBlocks = motaActionBlocks_4a3632a9_8716_48b3_bf55_4ebbc4ff040c;
/* var category_new = (function(){
for(var node of document.getElementById('toolbox').children) {
if(node.getAttribute('name')=='new') return node;
}
})(); */
var category_new = document.getElementById('toolbox').children[0];
for(var blockNode of document.getElementById('toolbox_source').children){
category_new.appendChild(Blockly.Xml.textToDom(Blockly.Xml.domToText(blockNode)));
var sepNode=document.createElement('sep');
sepNode.setAttribute('gap',5);
category_new.appendChild(sepNode);
//category_new.innerHTML+='<sep gap="5"></sep>';
}
motaActionBlocks.forEach(function(v){
/*
var blockNode=document.createElement('block');
blockNode.setAttribute('type',v.type);
category_new.appendChild(blockNode);
//category_new.innerHTML+='<block type="'+v.type+'"></block>';
var sepNode=document.createElement('sep');
sepNode.setAttribute('gap',5);
category_new.appendChild(sepNode);
//category_new.innerHTML+='<sep gap="5"></sep>';
*/
var blockFunc;
if(v.hasOwnProperty('initFunc')){
blockFunc = v['initFunc'];
if (!(blockFunc instanceof Function)){
eval('blockFunc = '+v['initFunc']);
}
} else {
blockFunc = function() {this.jsonInit(v);}
}
Blockly.Blocks[v.type] = {
init: blockFunc
};
if(v.hasOwnProperty('generFunc')){
blockFunc = v['generFunc'];
if (!(blockFunc instanceof Function)){
eval('blockFunc = '+v['generFunc']);
}
Blockly.JavaScript[v.type] = blockFunc;
}
});
/*
b=[]
for(var ii in Blockly.JavaScript){if(typeof(Blockly.JavaScript[ii])==typeof(0)){
b.push([ii,Blockly.JavaScript[ii]]);
}}
b.sort(function(a,b){return a[1]-b[1]})
Blockly.JavaScript.ORDER_ATOMIC = 0; // 0 "" ...
Blockly.JavaScript.ORDER_NEW = 1.1; // new
Blockly.JavaScript.ORDER_MEMBER = 1.2; // . []
Blockly.JavaScript.ORDER_FUNCTION_CALL = 2; // ()
Blockly.JavaScript.ORDER_INCREMENT = 3; // ++
Blockly.JavaScript.ORDER_DECREMENT = 3; // --
Blockly.JavaScript.ORDER_BITWISE_NOT = 4.1; // ~
Blockly.JavaScript.ORDER_UNARY_PLUS = 4.2; // +
Blockly.JavaScript.ORDER_UNARY_NEGATION = 4.3; // -
Blockly.JavaScript.ORDER_LOGICAL_NOT = 4.4; // !
Blockly.JavaScript.ORDER_TYPEOF = 4.5; // typeof
Blockly.JavaScript.ORDER_VOID = 4.6; // void
Blockly.JavaScript.ORDER_DELETE = 4.7; // delete
Blockly.JavaScript.ORDER_DIVISION = 5.1; // /
Blockly.JavaScript.ORDER_MULTIPLICATION = 5.2; // *
Blockly.JavaScript.ORDER_MODULUS = 5.3; // %
Blockly.JavaScript.ORDER_SUBTRACTION = 6.1; // -
Blockly.JavaScript.ORDER_ADDITION = 6.2; // +
Blockly.JavaScript.ORDER_BITWISE_SHIFT = 7; // << >> >>>
Blockly.JavaScript.ORDER_RELATIONAL = 8; // < <= > >=
Blockly.JavaScript.ORDER_IN = 8; // in
Blockly.JavaScript.ORDER_INSTANCEOF = 8; // instanceof
Blockly.JavaScript.ORDER_EQUALITY = 9; // == != === !==
Blockly.JavaScript.ORDER_BITWISE_AND = 10; // &
Blockly.JavaScript.ORDER_BITWISE_XOR = 11; // ^
Blockly.JavaScript.ORDER_BITWISE_OR = 12; // |
Blockly.JavaScript.ORDER_LOGICAL_AND = 13; // &&
Blockly.JavaScript.ORDER_LOGICAL_OR = 14; // ||
Blockly.JavaScript.ORDER_CONDITIONAL = 15; // ?:
Blockly.JavaScript.ORDER_ASSIGNMENT = 16; // = += -= *= /= %= <<= >>= ...
Blockly.JavaScript.ORDER_COMMA = 17; // ,
Blockly.JavaScript.ORDER_NONE = 99; // (...)
*/
//===init===
var demoWorkspace = Blockly.inject('blocklyDiv',{
media: 'media/',
toolbox: document.getElementById('toolbox'),
zoom:{
controls: true,
wheel: true,//false
startScale: 1.0,
maxScale: 3,
minScale: 0.3,
scaleSpeed: 1.08
},
trashcan: false,
});
//var xml_init = `<xml><block type="event_m" id="ZjQTmcPqlbmB4rWwtHFb" deletable="false" xxmovable="false"><statement name="actionList"><block type="actionlist" id="EqXfr9escNaQbktsBeeR"></block></statement></block></xml>`
var xml_init = '<xml xmlns="http://www.w3.org/1999/xhtml"><variables></variables><block type="event_m" id="ZjQTmcPqlbmB4rWwtHFb" ><statement name="actionList"><block type="actionlist" id="EqXfr9escNaQbktsBeeR"><statement name="ACTIONS"><block type="text_s_1" id="3.34tovt~URp|A^JLW`-"><field name="Evalstring">实现了文档中 choices: 给用户提供选项 中的复杂事件</field><next><block type="if_s" id="mB{gA~yKm5CmnjboTc)@"><value name="EvalString"><block type="logic_compare" id="Av`[}J)p1a*~f[x%k/iC"><field name="OP">EQ</field><value name="A"><block type="evalstring_all_e" id="L9PP2VY*=G2}u~[XH^~8"><field name="IdString">flag</field><field name="EvalString">women</field></block></value><value name="B"><shadow type="math_number" id="K(e-BEb3lq4p_Uq3a4fP"><field name="NUM">0</field></shadow></value></block></value><statement name="actionList"><block type="actionlist" id="n4IT]Xp(ep!b5Z;A7i!)"><statement name="ACTIONS"><block type="text_s_2" id="Fj~J}^k-ybh%hCTc!HzJ"><field name="EvalString">老人</field><field name="IdString">woman</field><field name="Evalstring_1">这是个很复杂的例子它将教会你如何使用if 语句进行条件判断,以及 choices 提供选项来供用户进行选择。</field><next><block type="text_s_2" id="tp$q~?4^N.CkBrW.)m=:"><field name="EvalString">老人</field><field name="IdString">woman</field><field name="Evalstring_1">第一次访问我将显示这段文字;从第二次开始将会向你出售钥匙。\n钥匙价格将随着访问次数递增。\n当合计出售了七把钥匙后将送你一把大黄门钥匙并消失不再出现。</field><next><block type="text_s_2" id="#GN{01Kr#=U]IrEpF81F"><field name="EvalString">老人</field><field name="IdString">woman</field><field name="Evalstring_1">这部分的逻辑比较长,请细心看样板的写法,是很容易看懂并理解的。</field></block></next></block></next></block></statement></block></statement><statement name="actionList_1"><block type="actionlist" id="zNiAq:34?E~VA]]_.*z?"><statement name="ACTIONS"><block type="if_s" id="q45FD9cEAXzv+6K1Q+As"><value name="EvalString"><block type="logic_compare" id="s(8a`p#Br9D42#:.(Ajp"><field name="OP">EQ</field><value name="A"><block type="evalstring_all_e" id="wY1%gHYZlbTR%w!j=.L;"><field name="IdString">flag</field><field name="EvalString">women</field></block></value><value name="B"><shadow type="math_number" id="=8W59@z1c8z3mg*sF%Yv"><field name="NUM">8</field></shadow></value></block></value><statement name="actionList"><block type="actionlist" id="NPPgOQR,ZNWZ]+qTcYo."><statement name="ACTIONS"><block type="text_s_2" id="7gm0#-f#SSZkhb@}`Vi#"><field name="EvalString">老人</field><field name="IdString">woman</field><field name="Evalstring_1">你购买的钥匙已经够多了,再继续卖给你的话我会有危险的。</field><next><block type="text_s_2" id="6(z!Sd.3gKP!G3|nYRcq"><field name="EvalString">老人</field><field name="IdString">woman</field><field name="Evalstring_1">看在你贡献给我这么多钱的份上,送你一把大黄门钥匙吧,希望你能好好用它。</field><next><block type="setvalue_s" id=";=ePDQeTA,kwEh$Ra^X_"><value name="EvalString"><block type="evalstring_all_e" id="z6.,x%^#p/C/Qk,gRjW#"><field name="IdString">item</field><field name="EvalString">bigKey</field></block></value><value name="EvalString_1"><block type="math_arithmetic" id=";etEds+-9.R3D)_h2m!b"><field name="OP">ADD</field><value name="A"><block type="evalstring_all_e" id="X30zJUgVZ^j@,4VzRY+U"><field name="IdString">item</field><field name="EvalString">bigKey</field></block></value><value name="B"><shadow type="math_number" id="8|9c~,axhUiAiXkoDe5L"><field name="NUM">1</field></shadow></value></block></value><next><block type="text_s_2" id="#SD_,q#qW}P_$FVas4e,"><field name="EvalString">老人</field><field name="IdString">woman</field><field name="Evalstring_1">我先走了,拜拜~</field><next><block type="hide_s" id=")7zo%}*LQeNTH5/(dX:,"><field name="INT"></field><field name="INT_1"></field><field name="IdString"></field><field name="INT_2">500</field></block></next></block></next></block></next></block></next></block></statement></block></statement><statement name="actionList_1"><block type="actionlist" id="Al0uQGP.@b8JT5*AkGt("><statement name="ACTIONS"><block type="choices_s" id="7;M82mnQZq-[SxPg|Q}4"><field name="EvalString">\t[老人,woman]少年,你需要钥匙吗?\n我这里有大把的</field><statement name="choicesContextList"><block type="choicescontext" id="3KXrI#DBm{X|YrW=yNzr"><field name="EvalString">黄钥匙(${9+flag:woman_times}金币)</field><statement name="actionList"><block type="actionlist" id="W_o#WBfK_M[M$~4NcuY/"><statement name="ACTIONS"><block type="if_s" id="1WMD~nib3*_IF,XbQt18"><value name="EvalString"><block type="logic_compare" id="^S@~Fb^s*:!MA293S-2R"><field name="OP">GT</field><value name="A"><block type="evalstring_all_e" id="aa*eD]u,rpCT9rx-gy9@"><field name="IdString">status</field><field name="EvalString">money</field></block></value><value name="B"><shadow type="math_number" id="gNe0fzQ3r+8KN{;/3nru"><field name="NUM">100</field></shadow><block type="math_arithmetic" id="/5p1%-Fn+hMrrC+=npRQ"><field name="OP">ADD</field><value name="A"><block type="math_number" id="397+rc2h0:_1dGJUDe4N"><field name="NUM">9</field></block></value><value name="B"><shadow type="math_number" id="(MwwB`J#QLyIza@kwV6r"><field name="NUM">1</field></shadow><block type="evalstring_all_e" id="c^yw+7ul=|(t#SO|RE]="><field name="IdString">flag</field><field name="EvalString">woman_times</field></block></value></block></value></block></value><statement name="actionList"><block type="actionlist" id="/t}GM:Vt#HCbvNXA+y)E"><statement name="ACTIONS"><block type="setvalue_s" id="W8^$5^:x,0FbL1?*)7wl"><value name="EvalString"><block type="evalstring_all_e" id="0g[76$.9md-_UjOf90q}"><field name="IdString">status</field><field name="EvalString">money</field></block></value><value name="EvalString_1"><block type="math_arithmetic" id="BkagWN$EMdwf34~*ir=x"><field name="OP">MINUS</field><value name="A"><shadow type="math_number" id="])W~iS3`H%9+Zj?-6G1X"><field name="NUM">1</field></shadow><block type="evalstring_all_e" id="s2h~Mc^k6gMjxy--w`6U"><field name="IdString">status</field><field name="EvalString">money</field></block></value><value name="B"><shadow type="math_number" id="[1m|A:2a3JT2+nX=kw8l"><field name="NUM">1</field></shadow><block type="math_arithmetic" id="@JLsKU2nRpS5^3D(}iID"><field name="OP">ADD</field><value name="A"><block type="math_number" id="pAqfF:veJ!VY@%M2o#Qh"><field name="NUM">9</field></block></value><value name="B"><shadow type="math_number" id="(MwwB`J#QLyIza@kwV6r"><field name="NUM">1</field></shadow><block type="evalstring_all_e" id="d~sb)f/4u^z:T*)_DYdD"><field name="IdString">flag</field><field name="EvalString">woman_times</field></block></value></block></value></block></value><next><block type="setvalue_s" id="t^!`ARoxxX{@%K0)dhU$"><value name="EvalString"><block type="evalstring_all_e" id="L%3fu1GeNRp[v5h8GFPf"><field name="IdString">item</field><field name="EvalString">yellowKey</field></block></value><value name="EvalString_1"><block type="math_arithmetic" id="LQf)@%~$k?frXt4w_#HP"><field name="OP">ADD</field><value name="A"><block type="evalstring_all_e" id="DJO76`0##,kv$7R|dxnG"><field name="IdString">item</field><field name="EvalString">yellowKey</field></block></value><value name="B"><shadow type="math_number" id="CSB3_2t%3m.90nl9t0/%"><field name="NUM">1</field></shadow></value></block></value></block></next></block></statement></block></statement><statement name="actionList_1"><block type="actionlist" id="1q=-j__Z8XrTdijQk3;2"><statement name="ACTIONS"><block type="text_s_2" id="Uwy9+c1h-C];+9@A9Pze"><field name="EvalString">老人</field><field name="IdString">woman</field><field name="Evalstring_1">你的金钱不足!</field><next><block type="revisit_s" id="^TdL2L]c[MLyE9NRlWT|"></block></next></block></statement></block></statement></block></statement></block></statement><next><block type="choicescontext" id="%Jw4/]WLl2;G~i6Id-*t"><field name="EvalString">蓝钥匙(${18+2*flag:woman_times}金币)</field><statement name="actionList"><block type="actionlist" id="oR!q:eXqk3{=VaU?CmcJ"></block></statement><next><block type="choicescontext" id="l4:tywnG2C.3+Dg%-Zf~"><field name="EvalString">红钥匙(${36+4*flag:woman_times}金币)</field><statement name="actionList"><block type="actionlist" id="Sy98T6MjM!+Wjgr2u;,H"></block></statement></block></next></block></next></block></statement></block></statement></block></statement></block></statement></block></statement><next><block type="setvalue_s" id="y+r[Q2]ri_tOpABI(*fh"><value name="EvalString"><block type="evalstring_all_e" id="TwNVtG,j[^jU.i)t5*@_"><field name="IdString">flag</field><field name="EvalString">woman_times</field></block></value><value name="EvalString_1"><block type="math_arithmetic" id="%k^q!D%y5yy%@B#)ji#5"><field name="OP">ADD</field><value name="A"><block type="evalstring_all_e" id="bzhCPn`Fy!h.Jj|dmq:K"><field name="IdString">flag</field><field name="EvalString">woman_times</field></block></value><value name="B"><shadow type="math_number" id="%Sl.Z`]iE]y{JAs2Q-}F"><field name="NUM">1</field></shadow></value></block></value><next><block type="revisit_s" id="n]{f{W-?wDAz0@Eo9y3v"></block></next></block></next></block></next></block></statement></block></statement></block></xml>';
var xml = Blockly.Xml.textToDom(xml_init);
Blockly.Xml.domToWorkspace(xml, demoWorkspace);
//demoWorkspace.getBlockById("ZjQTmcPqlbmB4rWwtHFb").setDeletable(false);//设置为不可删除
setTimeout(function(){
//demoWorkspace.getBlockById("ZjQTmcPqlbmB4rWwtHFb").dispose();//删除
}, 1000*1000);
//=== listen
function myUpdateFunction(event) {
gevent=event;
console.log(event);
/*
https://developers.google.com/blockly/guides/configure/web/events
file:///E:/workspace/blockly/blockly-master/demos/[mytest/Events%20%C2%A0_%C2%A0%20Blockly%20%C2%A0_%C2%A0%20Google%20Developers.mhtml
type string One of Blockly.Events.CREATE, Blockly.Events.DELETE, Blockly.Events.CHANGE, Blockly.Events.MOVE, Blockly.Events.UI.
workspaceId string UUID of workspace. The workspace can be found with Blockly.Workspace.getById(event.workspaceId)
blockId string UUID of block. The block can be found with workspace.getBlockById(event.blockId)
group string UUID of group. Some events are part of an indivisible group, such as inserting a statement in a stack.
demoWorkspace.getBlockById(event.blockId).type=="customvar"
*/
try {
var code = Blockly.JavaScript.workspaceToCode(demoWorkspace);
document.getElementById('codeArea').innerText = code;
} catch (error) {
document.getElementById('codeArea').innerText = String(error);
console.log(error);
}
}
demoWorkspace.addChangeListener(myUpdateFunction);
demoWorkspace.addChangeListener(Blockly.Events.disableOrphans);//自动禁用任何未连接到根块的块
/*
var MY_VARIABLE_callback = function (workspace) {
var varList = ['status:atk','status:money','status:hp'];
var xmlList = [];
if (Blockly.Blocks['customvar']) {
for (var i = 0; i < varList.length; i++) {
var blockText = '<xml>' +
'<block type="customvar">' +
'<field name="VARNAME">' + varList[i] + '</field>' +
'</block>' +
'</xml>';
var block = Blockly.Xml.textToDom(blockText).firstChild;
xmlList.push(block);
}
}
return xmlList;
}
demoWorkspace.registerToolboxCategoryCallback('MY_VARIABLE', MY_VARIABLE_callback);
*/
</script>
<script>
function showXML() {
/* // Generate JavaScript code and display it.
Blockly.JavaScript.INFINITE_LOOP_TRAP = null;
var code = Blockly.JavaScript.workspaceToCode(demoWorkspace);
alert(code); */
var xml = Blockly.Xml.workspaceToDom(demoWorkspace);
var xml_text = Blockly.Xml.domToText(xml);
console.log(xml_text);
console.log(xml);
}
function runCode() {
// Generate JavaScript code and run it.
window.LoopTrap = 1000;
Blockly.JavaScript.INFINITE_LOOP_TRAP =
'if (--window.LoopTrap == 0) throw "Infinite loop.";\n';
var code = Blockly.JavaScript.workspaceToCode(demoWorkspace);
Blockly.JavaScript.INFINITE_LOOP_TRAP = null;
try {
eval('obj=' + code.split('\n').join(''));
console.log(obj);
} catch (e) {
alert(e);
}
}
</script>
<script>
/*
var xml = Blockly.Xml.workspaceToDom(demoWorkspace);
var xml_text = Blockly.Xml.domToText(xml);
//------
var xml = Blockly.Xml.textToDom(xml_text);
Blockly.Xml.domToWorkspace(xml, demoWorkspace);
*/
</script>
</body>
</html>