如何在 p5.js 中制作动画?
How to animate in p5.js?
我正在尝试为线条设置动画,但我不知道如何proceed.The我目前写的代码是这样的。
function setup() {
createCanvas(400, 400);
textSize(8);
}
function temp(){
strokeWeight(5);
point(150,108);
point(56,75);
point(121,185);
strokeWeight(1);
line(150,108,56,75);
line(56,75,121,185);
}
function draw() {
clear();
background(220);
translate(35,60);
temp();
}
我想要的是线条按照绘制的顺序一条一条出现,当它们绘制时屏幕清晰,然后再一条一条基本上应该按顺序出现。我不知道该怎么做。
GIF ===>https://thumbs.gfycat.com/SnoopyWildDuckbillcat.webp
我得到的输出是这样的
The output
创建一个对象数组,这些对象具有坐标并知道如何绘制。
在 draw 函数中你可以遍历数组,根据你的逻辑修改每个对象的坐标并调用它们的 draw 方法。
在绘图函数中调用背景,您可以删除清除调用,因为背景会绘制在线条上
创建点列表:
var pointList = [[150, 108], [56, 75], [121, 185]]
设置帧率 frameRate()
:
frameRate(5);
在循环中的多个点之间画线。要绘制的点数取决于frameCount
。使用取模 (%
) 运算符计算点数(%
运算符计算除法的余数:
function temp(){
var noOfPoints = frameCount % (pointList.length+1);
strokeWeight(5);
for (var i = 0; i < noOfPoints; i++) {
point(...pointList[i]);
}
strokeWeight(1);
for (var i = 0; i < noOfPoints-1; i++) {
line(...pointList[i], ...pointList[i+1]);
}
}
示例:
var pointList = []
function setup() {
createCanvas(220, 220);
frameRate(5);
for (var i = 0; i <= 10; i++) {
var angle = TWO_PI * i / 10;
var radius = i % 2 == 0 ? 100 : 50;
pointList.push([radius * sin(angle), radius * -cos(angle)])
}
}
function temp(){
var noOfPoints = frameCount % (pointList.length+1);
strokeWeight(5);
for (var i = 0; i < noOfPoints; i++) {
point(...pointList[i]);
}
strokeWeight(1);
for (var i = 0; i < noOfPoints-1; i++) {
line(...pointList[i], ...pointList[i+1]);
}
}
function draw() {
clear();
background(220);
translate(110, 110);
temp();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.3.1/p5.min.js"></script>
我正在尝试为线条设置动画,但我不知道如何proceed.The我目前写的代码是这样的。
function setup() {
createCanvas(400, 400);
textSize(8);
}
function temp(){
strokeWeight(5);
point(150,108);
point(56,75);
point(121,185);
strokeWeight(1);
line(150,108,56,75);
line(56,75,121,185);
}
function draw() {
clear();
background(220);
translate(35,60);
temp();
}
我想要的是线条按照绘制的顺序一条一条出现,当它们绘制时屏幕清晰,然后再一条一条基本上应该按顺序出现。我不知道该怎么做。
GIF ===>https://thumbs.gfycat.com/SnoopyWildDuckbillcat.webp
我得到的输出是这样的 The output
创建一个对象数组,这些对象具有坐标并知道如何绘制。 在 draw 函数中你可以遍历数组,根据你的逻辑修改每个对象的坐标并调用它们的 draw 方法。
在绘图函数中调用背景,您可以删除清除调用,因为背景会绘制在线条上
创建点列表:
var pointList = [[150, 108], [56, 75], [121, 185]]
设置帧率 frameRate()
:
frameRate(5);
在循环中的多个点之间画线。要绘制的点数取决于frameCount
。使用取模 (%
) 运算符计算点数(%
运算符计算除法的余数:
function temp(){
var noOfPoints = frameCount % (pointList.length+1);
strokeWeight(5);
for (var i = 0; i < noOfPoints; i++) {
point(...pointList[i]);
}
strokeWeight(1);
for (var i = 0; i < noOfPoints-1; i++) {
line(...pointList[i], ...pointList[i+1]);
}
}
示例:
var pointList = []
function setup() {
createCanvas(220, 220);
frameRate(5);
for (var i = 0; i <= 10; i++) {
var angle = TWO_PI * i / 10;
var radius = i % 2 == 0 ? 100 : 50;
pointList.push([radius * sin(angle), radius * -cos(angle)])
}
}
function temp(){
var noOfPoints = frameCount % (pointList.length+1);
strokeWeight(5);
for (var i = 0; i < noOfPoints; i++) {
point(...pointList[i]);
}
strokeWeight(1);
for (var i = 0; i < noOfPoints-1; i++) {
line(...pointList[i], ...pointList[i+1]);
}
}
function draw() {
clear();
background(220);
translate(110, 110);
temp();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.3.1/p5.min.js"></script>