gpt4 book ai didi

javascript/jquery/processing.js - 如何最有效地创建 Canvas 元素并为其设置动画

转载 作者:行者123 更新时间:2023-11-28 21:14:34 25 4
gpt4 key购买 nike

我正在尝试构建一个应用程序,该应用程序基于各种用户交互,允许将各种基于椭圆的视觉效果添加到舞台上,然后非常简单地进行动画处理。我目前已经设置了一个基本的演示,其中 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>

处理.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 );
}
}

最佳答案

如果您想控制何时将Processing.js绘制到 Canvas 上,您有两个选择。在这两种情况下,您要做的第一件事就是访问处理实例:

var p = Processing.instances[0];

现在您可以从 JavaScript 进行所有您想要的处理 API 调用。您可以在草图的 setup() 函数中调用 noLoop(),然后在 jQuery 动画循环中调用 p.redraw(),这将为一帧设置动画。

在Processing.js中,我们将所有函数附加到Processing实例。因此,另一个选择是在草图中创建您自己的函数,并使用以下方式调用它:

var p = Processing.instances[0];
p.drawEllipses(radius);

您甚至可以在函数参数中将数据传递给它,从而无需 windows.Processing.data。

关于javascript/jquery/processing.js - 如何最有效地创建 Canvas 元素并为其设置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7960054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com