code blocks代码性能分析_Blockly 例子分析
飞机座位数游戏(/demos/plane/index.html)
计算飞机座位数游戏总共有3关
- 飞机只有头等舱座位
- 飞机座位有驾驶员座位和头等舱座位
- 飞机座位除驾驶员座位和头等舱座位外,还有经济舱座位
![](/assets/blank.gif)
飞机由svg生成,头等行和经济等行可根据滑动变换数字,座位积木填入公式,公式计算出的结果显示在飞机上“座位:?”处。
![](/assets/blank.gif)
飞机的实现
飞机的实现比较简单,飞机由svg自动生成,飞机座位数由游戏等级和滑动条实现,滑动条通过slider来实现,当飞机等级变化时,控制飞机座位类型的实现或隐藏,当滑动条变化时,slider会调用sliderChange事件,从而进一步控制svg座位行数的变化。
积木块变化
积木块的变化分为两部分,是否显示积木以及积木行数的变化。是否显示积木通过等级的变化来控制Toolbox是否包含积木对应的xml,从而控制Toolbox中积木是否显示。积木行数会随着滑动条的变化而变化,是因为在每次svg重绘时会调用积木的customUpdate函数,从而达到积木行数的变化。
//更新积木行数function updateBlocks(blocks) { for (var i = 0, block; block = blocks[i]; i++) { block.customUpdate && block.customUpdate(); }}//积木定义,其中customUpdate函数会改变行数Blockly.Blocks['plane_get_rows'] = { // Block for row variable getter. init: function() {this.setHelpUrl(Blockly.Msg['VARIABLES_GET_HELPURL']); this.setColour(330); this.appendDummyInput() .appendField(Plane.getMsg('Plane_getRows'), 'title'); this.setOutput(true, 'Number'); }, customUpdate: function() { this.setFieldValue( Plane.getMsg('Plane_getRows').replace('%1', Plane.rows1st), 'title'); }};
公式计算
公式计算就是获得工作空间中plane_set_seats积木,通过Blockly.JavaScript.blockToCode函数获得公式代码,执行JS的eval函数获得公式结果。
Plane.recalculate = function() { var rootBlock = null; //查找积木堆,并判断哪些是plane_set_seats积木 var blocks = Plane.workspace.getTopBlocks(false); for (var i = 0, block; block = blocks[i]; i++) { if (block.type == 'plane_set_seats') { rootBlock = block; } } //根据积木堆的公式,获得代码,并执行得到座位数seats var seats = NaN; Blockly.JavaScript.init(Plane.workspace); var code = Blockly.JavaScript.blockToCode(rootBlock); try { seats = eval(code); } catch (e) { // Allow seats to remain NaN. } //设置座位数到svg上,并判断计算是否正确 Plane.setText('seatText', Plane.getMsg('Plane_seats').replace( '%1', isNaN(seats) ? '?' : seats)); Plane.setCorrect(isNaN(seats) ? null : (Plane.answer() == seats));......};
公式绘图游戏(/demos/graph/index.html)
简单绘图游戏由积木生成公式,绘图区域根据公式生成图形。公式积木由标准Toolbox即可生成,游戏主要在于由积木如何绘制图形。
![](/assets/blank.gif)
X积木
X积木是一个值积木
Blockly.defineBlocksWithJsonArray([{ "type": "graph_get_x", "message0": "x", "output": "Number", "colour": Blockly.Msg['VARIABLES_HUE'], "tooltip": Blockly.Msg['VARIABLES_GET_TOOLTIP'], "helpUrl": Blockly.Msg['VARIABLES_GET_HELPURL']}]);
X积木JS代码
Blockly.JavaScript['graph_get_x'] = function(block) { // x variable getter. return ['x', Blockly.JavaScript.ORDER_ATOMIC];};
Y积木定义
Y积木只是定义了一个输入类型为Number值为VALUE的积木
Blockly.defineBlocksWithJsonArray([{ "type": "graph_set_y", "message0": "y = %1", "args0": [ { "type": "input_value", "name": "VALUE", "check": "Number" } ], "colour": Blockly.Msg['VARIABLES_HUE'], "tooltip": Blockly.Msg['VARIABLES_SET_TOOLTIP'], "helpUrl": Blockly.Msg['VARIABLES_SET_HELPURL']}]);
Y积木js代码
Blockly.JavaScript['graph_set_y'] = function(block) { // y variable setter. var argument0 = Blockly.JavaScript.valueToCode(block, 'VALUE', Blockly.JavaScript.ORDER_ASSIGNMENT) || ''; return 'y = ' + argument0 + ';';};
采集图形点
根据积木堆生成的代码,采取图形点X轴每次以0.1增加,生成XY轴图形点。
Graph.plot = function(code) { var table = []; var y; //X轴从-10到10开始每次增加0.1,执行eval获得Y轴值 for (var x = -10; x <= 10; x = Math.round((x + 0.1) * 10) / 10) { try { eval(code); } catch (e) { y = NaN; } if (!isNaN(y)) { y = Math.round(y * Math.pow(10, 14)) / Math.pow(10, 14); table.push([x, y]); } } ...... return table;};
图形绘制
根据第三方绘图函数,绘制图形。
Graph.drawVisualization = function() {//获取积木代码 var formula = Blockly.JavaScript.workspaceToCode(Graph.workspace); if (formula === Graph.oldFormula_) { return; } Graph.oldFormula_ = formula;//采集公式的图形点 var data = google.visualization.arrayToDataTable(Graph.plot(formula)); //调用google的图形化库画线google.visualization.LineChart(document.getElementById('visualization')). draw(data, Graph.options_); // 显示公式 formula = formula.substring(formula.indexOf('y = ')); formula = formula.substring(0, formula.indexOf(';')); var funcText = document.getElementById('funcText');funcText.replaceChild(document.createTextNode(formula), funcText.lastChild);};
code blocks代码性能分析_Blockly 例子分析相关推荐
- code blocks代码性能分析_记一次Python Web接口优化,性能提升25倍!
背景 我们负责的一个业务平台,有次在发现设置页面的加载特别特别地慢,简直就是令人发指 让用户等待 36s 肯定是不可能的,于是我们就要开启优化之旅了. 投石问路 既然是网站的响应问题,可以通过 Chr ...
- code blocks代码性能分析_Julia系列教程13--如果写出高性能的Julia代码
避免全局变量https://www.zhihu.com/video/1113506985873588224 code generationhttps://www.zhihu.com/video/111 ...
- code blocks 代码颜色_vuepress中实现代码折叠、高亮
最近在vuepress中撰写UI框架文档时发现在组件中插入演示代码没高亮,虽然在文档markdown中写代码有高亮但就无法实现折叠了,而且vuepress没有提供折叠代码的配置,因此实现一个折叠组件外 ...
- ortp分析之一 例子分析
一. rtpsend.c主要内容 这个例子主要是表示了PCMU格式的音频文件或者直接从声卡得到的音频流如何发送 int main(int argc, char *argv[]) { RtpSe ...
- 灵异事件 !同一个代码在code::blocks和Dev上面运行结果不一样!(一番分析后找到原因!)
我今天在code的时候发现了一个灵异事件 !同一个代码在code::blocks和Dev上面运行结果不一样! 如图,同一个代码文件在两个编译器上的输出不同: 同样的代码在code::blocks上输出 ...
- Android app native代码性能分析
分析我们app中native层的C/C++代码性能,能够方便我们找出其中的性能瓶颈,并在稍后做有针对性的优化. 下载android-ndk-profiler 工欲善其事,必先利其器,我们先要有良好的工 ...
- .NET 11 个 Visual Studio 代码性能分析工具
原文地址 软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行 ...
- 11个Visual Studio代码性能分析工具
软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行代码分析和 ...
- 11 个 Visual Studio 代码性能分析工具
软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行代码分析和 ...
最新文章
- 力扣(LeetCode)刷题,简单题(第6期)
- @所有技术社区,年度”社区之星“开选,快来盘点各家技术大佬
- 以下关于python的赋值_单选(1分) 以下关于Python的赋值说法中错误的是哪一个选项?...
- iPhone清理喇叭灰尘_手机喇叭孔灰尘清理
- MongoDB基础教程系列--目录结构
- 4.25 数据库 仓库例题
- CSS 小结笔记之文字溢出处理
- NGUI系列教程五(角色信息跟随)
- c语言+Easy X图形库实现飞机大战,源码加素材
- leetcode 合并两个有序数组
- windows磁盘空间释放(二)
- 【软件下载】Excel下载 word下载 官方 官网下载 原始镜像 开发工具 开发软件下载
- 施主,贫僧乃东土大唐而来,恳请在此借宿一晚……...
- 全文检索(一) -- Lucene
- 检测恶意软件分类模型中的概念漂移
- 2018工作--武汉篇
- java中类可以包含哪些元素,Java类中包含的元素及作用
- 3dmax软件下载linux,3D效果制作软件(Arnold MAXtoA)
- Linux Mint的常见设置修改
- 如何打开磁盘管理工具