canvas教程

适用于javascript开发者的Processing.js入门教程(3)

字号+ 作者:H5之家 来源:H5之家 2017-02-13 12:01 我要评论( )

var jsString = "Hello from JavaScript!";var printMessage = function(msg) { document.getElementById('msg').innerHTML = "Message: " + msg; }; String processingString = "Hello from Processing!"; void se

var jsString = "Hello from JavaScript!"; var printMessage = function(msg) { document.getElementById('msg').innerHTML = "Message: " + msg; }; String processingString = "Hello from Processing!"; void setup() { printMessage(jsString + " " + processingString); }

          有些javascript语法很难用这种方式混在一起写(例如:正则语法)。如果是那样的情况的话,你可以简单地将纯javasript代码移到一个<script>代码块里,然后像上边“Accessing JavaScript Objects from Processing”描述的那样来访问它。
     3)、从javascript里访问 processing
              得出个结论是从Processing 代码里访问javascript比反过来要容易的多,因为被Processing解析器创建javascript没有直接暴露在全局对象里,因此你只能通过Processing.instances 的属性来访问。
              Processing 的构造器一直都在监视实例的创建,并且使得他们可以使用getInstanceById()方法。默认,当<canvas>有属性 data-processing-source时,它的id将会作为Processing 实例的唯一识别负。如果没有id属性,你可以用Proessing.instance[0]来访问。
              当你有一个能够访问Processing实例的引用时,你就可以调用它像这样:

<!DOCTYPE html> <html> <head> <title>Hello Web - Controlling Processing from JavaScript</title> <script src="processing-1.3.6.min.js"></script> </head> <body> <canvas data-processing-sources="controlling.pde"></canvas> <button> Start</button> <button> Stop</button> <script type="application/javascript"> var processingInstance; function startSketch() { switchSketchState(true); } function stopSketch() { switchSketchState(false); } function switchSketchState(on) { if (!processingInstance) { processingInstance = Processing.getInstanceById('sketch'); } if (on) { processingInstance.loop(); // call Processing loop() function } else { processingInstance.noLoop(); // stop animation, call noLoop() } } </script> </body> </html>

      在DOM结构中有2个按钮,他们被用来让用户选择开始或暂停正在运行的Processing sketch.
他们直接在javascript中控制Processing实例(在页面里你可能有多个,或者藏在div中),通过调用Processing的方法:loop()和noLoop()。这些Processing 的方法可以在其他的文件中找到。
作为一个使用Processing.js的开发者必须知道的事情:
       当 Processing.js试图去完全兼容 Processing时,就有些不同的事情或者需要解决办法。我们也增加了一些web规范的功能来使Processing更容易被使用。 这里有一些技巧和提示在你开始使用Processing.js做复杂的sketch时可能有帮助。
Processing.js提供通过“externals”属性来访问各种 DOM/javascript对象
       每个Processing 实例(即:Processing.instances)包含有一个"external"属性,它是一个对象,包含各种指向非常有用的非Processing 的DOM/javascritp 对象,例如:

canvas--sketch被绑定上的画板 context--画板的执行上下文 onblur and onfocus--事件处理器

如果一个除法表达式期望产生一个整型值,那么这可能需要显式转换
         当将Processing代码转化成javascript,涉及整型 vs 浮点型的除法的时候,有一个有bug的class会出现这个问题。
在Processing代码中出现某个东西直接除以整数的代码块,当被转化成Processing时,可能有时出现问题,因为,整型编程双精度型,被引入了一个小数部分。修补这个bug的方法是 显式转换任何除法,正如展示的做法:

// before int g = mouseX / i; // after int g = (int)(mouseX / i);

Processing.js有个欺骗在模拟 Processing的异步输入输出
          Processing 使用一个同步输入输出的模型,这就意味着 像loadImage()方法这样,需要相对长时间去执行,然而当他们执行期间,又没有任何事发生,程序等到它loadImage()执行完才去执行下一行语句。这就意味这可以依靠像loadImage()这样的方法返回的值用在接下来的代码中。
         但是web浏览器却不是这样的,它使用的是异步输入输出模型,这意味着加载外部资源的方法不能使得程序等到他们加载完再执行。为了实现Processing的load方法,你不得不使用一个特殊的Processing的指令。
         Processing.js指令提示浏览器,指令是写在注释里而不是Processing自身代码。这是一个典型的 Processing sketch,它需要同步加载一个图片然后画出它:

PImage img; void setup() { img = loadImage("picture.jpg"); image(img, 0, 0); }

        这些代码在含有Processing.js的浏览器里将不会执行,因为图片文件 picture.jpg被加载完之前就被调用了。修补这个bug的办法是让在sketch 开始执行前就把图片加载好,并且缓存起来,就是所说的预加载技术。这是修改后的代码:

/* @pjs preload="picture.jpg"; */ PImage img; void setup() { img = loadImage("picture.jpg"); image(img, 0, 0); }

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂

    javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂

    2017-02-08 18:02

  • JavaScript 雷达

    JavaScript 雷达

    2017-02-04 17:00

  • Canvas Clock

    Canvas Clock

    2017-01-24 16:00

  • HTML canvas to blob to downloadable file in IE9, 10

    HTML canvas to blob to downloadable file in IE9, 10

    2017-01-20 10:00

网友点评