Animation 在加工过程中设置形状集合动画的最简单方法?

Animation 在加工过程中设置形状集合动画的最简单方法?,animation,processing,Animation,Processing,我一直在学习处理,现在觉得画形状和编辑颜色等都很舒服。我试着为我以前的一个作品制作动画,但我似乎总是走到死胡同,或者我无法让这个单元连贯地移动。基本上,我正在尝试以任何方式在屏幕上移动这把吉他,只要它完好无损。如果您有什么建议,我将不胜感激 目前的代码如下: void setup() { size(600,600); smooth(); noLoop(); } void draw() { //pegs strokeJoin(SQUARE); fill(255,255,

我一直在学习处理,现在觉得画形状和编辑颜色等都很舒服。我试着为我以前的一个作品制作动画,但我似乎总是走到死胡同,或者我无法让这个单元连贯地移动。基本上,我正在尝试以任何方式在屏幕上移动这把吉他,只要它完好无损。如果您有什么建议,我将不胜感激

目前的代码如下:

void setup() {

size(600,600);

smooth();

noLoop();

}

void draw() {   
  //pegs
  strokeJoin(SQUARE);
  fill(255,255,255);
  rect(530,105,20,20);
  rect(565,70,20,20);
  rect(473,50,20,20);
  rect(505,18,20,20);

  //neck and head
  strokeWeight(60);
  strokeCap(SQUARE);
  strokeJoin(ROUND);
  stroke(165,42,42);
  line(490,110,560,40);
  fill(255,255,255);
  strokeWeight(45);
  strokeCap(SQUARE);
  strokeJoin(ROUND);
  line(300,295,500,105);



  //guitar body
  noStroke();
  fill(222,184,135);
  ellipse(200,400,200,200);
  ellipse(280,310,150,150);

  //Sound Hole
  fill(255,140,0);
  ellipse(235,360,110,110);  
  fill(0,0,0);
  ellipse(235,360,100,100);

  //strings
  stroke(255,255,255);
  strokeWeight(3);
  line(170,390,540,40);
  line(180,400,550,45);
  line(195,410,560,50);
  line(207,420,570,55);

 //string attatchment bottom
 strokeWeight(6);
 strokeCap(SQUARE);
 stroke(165,42,42);
 line(210,425,170,385);


} 

下面的代码将为吉他设置动画,使其沿正x轴移动。这只是一个示例,让您了解“动画”的实际工作原理:

// this will be used to move the guitar along x

int alongX = 0;

void setup() {

  background(128);

  size(600, 600);

  smooth();

  //noLoop();
}

void draw() { 
  background(128);  
  //pegs
  strokeJoin(SQUARE);
  fill(255, 255, 255);
  rect(530+alongX, 105, 20, 20);
  rect(565+alongX, 70, 20, 20);
  rect(473+alongX, 50, 20, 20);
  rect(505+alongX, 18, 20, 20);

  //neck and head
  strokeWeight(60);
  strokeCap(SQUARE);
  strokeJoin(ROUND);
  stroke(165, 42, 42);
  line(490+alongX, 110, 560+alongX, 40);
  fill(255, 255, 255);
  strokeWeight(45);
  strokeCap(SQUARE);
  strokeJoin(ROUND);
  line(300+alongX, 295, 500+alongX, 105);



  //guitar body
  noStroke();
  fill(222, 184, 135);
  ellipse(200+alongX, 400, 200, 200);
  ellipse(280+alongX, 310, 150, 150);

  //Sound Hole
  fill(255, 140, 0);
  ellipse(235+alongX, 360, 110, 110);  
  fill(0, 0, 0);
  ellipse(235+alongX, 360, 100, 100);

  //strings
  stroke(255, 255, 255);
  strokeWeight(3);
  line(170+alongX, 390, 540+alongX, 40);
  line(180+alongX, 400, 550+alongX, 45);
  line(195+alongX, 410, 560+alongX, 50);
  line(207+alongX, 420, 570+alongX, 55);

  //string attatchment bottom
  strokeWeight(6);
  strokeCap(SQUARE);
  stroke(165, 42, 42);
  line(210+alongX, 425, 170+alongX, 385);

  // incrementing alongX to move it along +x, decrement it to move it along -x
  alongX++;
}
这个想法很简单。动画基本上是一种运动错觉。对象看起来是在移动的,但效果非常简单,只需在屏幕上不同位置绘制和重画(以一定速度:
帧速率
)对象,就可以让观看者感觉它们好像在移动,而实际上它们不是

要使此效果有效,草图(或任何其他动画包)中必须包含某些内容:

  • 您需要有控制对象位置的变量,以便 要移动对象时,可以轻松更改值 以这样一种方式控制位置的变量 给人运动的错觉

  • 在这种情况下,您还需要不断重新绘制背景。那个 这就是为什么我添加了
    背景(128)draw()方法中的code>line。
    如果你把那行注释掉,你会看到效果是
    不同的吉他会留下痕迹(也许这就是你想要的
    想要…一条以后会消失的轨迹吗?由你决定!)

  • 你在草图中还需要考虑的另一件事是
    rect
    s和
    eliple
    s只需要在中更改一个变量 命令它们从左向右移动(在这种情况下 草图),
    line
    s需要由您的 变数

  • setup()
    中的
    noLoop()
    是专门设计的,因此您可以停止
    draw()
    从其
    无限循环
    游戏循环
    但停止
    draw()
    表示没有动画效果。例如,您可以使用
    noLoop()
    例如,在按下某个关键点时停止动画,但 还希望提供
    loop()
    ,以继续播放动画 按一个键。这些都是你需要思考的事情和决定 四处走动和玩耍

  • 最后,我只是稍微改变了你的素描,告诉你怎么做 动画可能有用。你可以给它添加很多东西来制作它 太棒了

PS:很酷的吉他

更新


在熟悉了移动物体的概念之后,我将研究向量,以及如何使用向量来设置物体的方向和速度。看一看正在处理的。足以让你使用PVectors。但我会在物体上这样做。例如,一个完整的
吉他
对象。不在单个
s和
rect
s上。

在您的问题中添加语言标记。如果其他人看不到标记,则正在处理该语言。哦,对不起。我没有意识到。