下面的代码旨在将蓝色背景和三个移动形状(圆形、正方形、三角形)绘制到屏幕上。然而,代码是用面向对象编程编写的,我的草图在处理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;
}
}
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 尽管我可