当前位置: 首页 > 知识库问答 >
问题:

我在OOP中的处理草图不起作用

白淇
2023-03-14

下面的代码旨在将蓝色背景和三个移动形状(圆形、正方形、三角形)绘制到屏幕上。然而,代码是用面向对象编程编写的,我的草图在处理IDE的Java模式下工作得很好,但在OpenProcessing中却不能工作,这是不对的。代码编译得很好。我想我在OOP中做了一些不正确的事情。谁能帮帮我吗?谢了!

Circle circle = new Circle(PI,200,400,400);
Square square = new Square(100,100);
Triangle triangle = new Triangle(400,400);
void setup() {
  size(800,800);
  rectMode(CENTER);
  ellipseMode(CENTER);
  noStroke();
  frameRate(120);
}
void draw() {
  background(0,0,255);
  circle.drawCircle();
  square.drawSquare();
  triangle.drawTriangle();
}
void shadeOfOrange(int x) {
  fill(255,128-x,0);
}
class Circle {
  float offsetX = 0;
  float offsetY = 0;
  float circleScalar;
  float angle;
  float circleStep = 0.005;
  Circle(float initialAngle,float radius,float offsetX,float offsetY) {
    angle = initialAngle;
    circleScalar = radius;
    this.offsetX = offsetX;
    this.offsetY = offsetY;
  }
  void drawCircle() {
    pushMatrix();
    for(int i = 100; i >= 1; i--) {
      shadeOfOrange(i);
      float x1 = offsetX + circleScalar*cos(angle);
      float y1 = offsetY + circleScalar*sin(angle);
      ellipse(x1,y1,i,i);
    }
    popMatrix();
    this.incrementAngle();
  }
  void incrementAngle() {
    angle += circleStep;
    if(angle >= 2*PI)
      angle -= 2*PI;
  }
}
class Square {
  boolean right = true;
  boolean down = false;
  boolean left = false;
  boolean up = false;
  int transX = 0;
  int transY = 0;
  int offsetX = 0;
  int offsetY = 0;
  Square(int offsetX,int offsetY) {
    this.offsetX = offsetX;
    this.offsetY = offsetY;
  }
  void drawSquare() {
    pushMatrix();
    translate(transX,transY);
    for(int i = 100; i >= 1; i--) {
      shadeOfOrange(i);
      rect(offsetX,offsetY,i,i);
    }
    popMatrix();
    this.adjustTranslation();
  }
  void adjustTranslation() {
    if(right) {
      transX++;
      if(transX == 600) {
        right = false;
        down = true;
      }
    }
    else if(down) {
      transY++;
      if(transY == 600) {
        down = false;
        left = true;
      }
    }
    else if(left) {
      transX--;
      if(transX == 0) {
        left = false;
        up = true;
      }
    }
    else if(up) {
      transY--;
      if(transY == 0) {
        up = false;
        right = true;
     }
    }
  }
}
class Triangle {
  float triangleScalar = 1;
  boolean scalarUp = true;
  float triangleStep = 0.01;
  int offsetX = 0;
  int offsetY = 0;
  Triangle(int offsetX,int offsetY) {
    this.offsetX = offsetX;
    this.offsetY = offsetY;
  }
  void drawTriangle() {
    pushMatrix();
    for(int i = 100; i >= 1; i--) {
      shadeOfOrange(i);
      float vert1x = offsetX;
      float vert1y = offsetY - (sqrt(3)/3)*i*triangleScalar;
      float vert2x = offsetX - i/2 * triangleScalar;
      float vert2y = offsetY + (sqrt(3)/6)*i*triangleScalar;
      float vert3x = offsetX + i/2 * triangleScalar;
      float vert3y = offsetY + (sqrt(3)/6)*i*triangleScalar;
      triangle(vert1x,vert1y,vert2x,vert2y,vert3x,vert3y);
    }
    popMatrix();
    this.incrementScalar();
  }
  void incrementScalar() {
    if(triangleScalar > 2.0)
      scalarUp = false;
    else if(triangleScalar < 0.5)
      scalarUp = true;

    if(scalarUp)
      triangleScalar += triangleStep;
    else
      triangleScalar -= triangleStep;
  }
}

共有1个答案

公西光华
2023-03-14

OpenProcessing使用Processing.js,也就是JavaScript,在用JavaScript命名时必须小心。例如,不能有与函数同名的变量

具体来说,triangel变量与triangel()函数发生冲突。基本上,您是在用triangel变量替换triangel()函数,因此当JavaScript尝试调用triangel()函数时,它会得到triangel变量,并得到以下错误:

Uncaught TypeError: triangle is not a function

注意,这显示在JavaScript控制台中。您真的应该养成检查错误的习惯。在大多数浏览器中,您可以通过按F12键来获得它。

更多信息可以在这里找到。

 类似资料:
  • 这是如何使用公共类frome的一个后续步骤。其他处理选项卡中的java文件?;使用来自的Usage类中的示例。java文件-有完整的文档吗?-处理2。x和3。x论坛,我有这个: /tmp/Sketch/Foo.java 这个例子运行得很好,但是如果我取消注释import peasy。组织 行,则编译失败: 当然,我确实在下安装了PeasyCam,如果我导入peasy.*它工作得很好 来自草图。 我

  • 我正在处理过程中将Java草图转换为Python草图。它使用的是P3D引擎,它在窗口中没有显示任何东西,而它在Java模式中显示的是我想要的东西。当我运行时,它只是显示一个空白的黑色窗口,而不是网格。我可以改变它的背景颜色,但我不能在形状或其他窗口绘制。请帮帮我!我不能分享它的代码,因为它不是一个开放源码项目。

  • 我试图在草图。我尝试了,但我想它不会工作,因为在Java中,它会阻止绘制图形。 基本上,我必须画一个三角形,在画三条边时会有延迟。 我该怎么做呢?

  • 我怎么让它工作?

  • 我对处理是完全陌生的,我想通过创建一个简单的绘制矩形的草图来测试它,然而,当我运行草图时,会弹出一个没有任何内容的窗口。我试着把它填满,在上面画一个提纲,还有其他各种事情,但什么都没发生。我认为这不是代码的问题,而是应用程序本身的问题,我不知道如何修复它。我正在windows上使用processing 3.5.4。 代码: 预期输出:屏幕上显示一个正方形。 输出:没有显示

  • 我目前正在研究一种数据可视化技术,它从电影中获取信息,实时播放并同时创建。为此,我想有两个独立的草图窗口。一个窗口应显示实时播放的电影,另一个窗口应显示正在进行的可视化。 我似乎不知道如何轻松地添加另一个草图窗口,并尝试了一些在处理3中不再工作的示例。 然后我偶然发现了这个例子:https://gist.github.com/atduskgreg/666e46c8408e2a33b09a 尽管我可