【发布时间】:2011-10-31 21:38:05
【问题描述】:
我正在尝试构建一个应用程序,该应用程序基于各种用户交互,允许将各种基于椭圆的视觉效果添加到舞台上,然后非常简单地制作动画。我目前有一个基本的演示设置,其中 javascript / jquery 与 processing.js 通信,但它看起来真的是低效的代码,因为处理依赖于运行一个连续的循环来绘制到屏幕上。我想知道,第一,我的做法是否会在更大范围内有效,第二,是否有更好的技术或方法可以使用。我来自 Flash 背景,除非触发一个函数告诉它动画,否则屏幕上的任何内容都不会更改或绘制/动画,这似乎是明智的。无论如何,这是我的代码:
HTML/JS:
<!DOCTYPE HTML>
<html lang="en">
<head>
<title>Processing</title>
<meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js" type="text/javascript"></script>
<script src="js/processing-1.3.6.min.js"></script>
<script src="processing/Tween.lib"></script>
</head>
<body>
<canvas id="circles" data-processing-sources="js/drawCircles.js"></canvas>
<div id="clicker">Click</div>
<script>
window.Processing.data = {};
var dataRef = window.Processing.data;
var animInterval;
dataRef.circleArray = new Array();
$('#clicker').click(function(){
var circle = {};
circle.radius = 50;
dataRef.circleArray.push(circle)
var from = {property: 50};
var to = {property: 75};
jQuery(from).animate(to, {
duration: 300,
step: function() {
for (var i in dataRef.circleArray){
circle.radius = this.property;
}
}
});
})
</script>
</body>
</html>
PROCESSING.JS
// Global variables
float radius = 1.0;
int X, Y;
int nX, nY;
int delay = 16;
// Setup the Processing Canvas
void setup(){
// Fill canvas grey
background( 100 );
size( 200, 200 );
strokeWeight( 10 );
frameRate( 15 );
X = width / 2;
Y = width / 2;
nX = X;
nY = Y;
}
// Main draw loop
void draw(){
var dataRef = window.Processing.data;
for (var i in window.Processing.data.circleArray){
radius = dataRef.circleArray[i].radius;
// Set fill-color to blue
fill( 0, 121, 184 );
// Set stroke-color white
stroke(255);
// Draw circle
ellipse( X+(i*10), Y, radius, radius );
}
}
【问题讨论】:
-
你有没有看过更简单的画布库,比如fabric.js? Fabric 为您提供了一个对象模型来处理画布上的对象(+动画、svg 解析等)。而且都是 JS,所以不需要学习新语法。
标签: javascript jquery canvas processing processing.js