在 Processing 中编写一个小型库

Writing a small library in Processing

我想做以下事情,但不知道如何做,也许有人可以帮忙:

我想在 Processing 中编写一个小型库,使学生可以使用面向对象的编程概念。我会给你一个简单的例子:

在处理过程中,我可以通过键入

在草图中的某处简单地创建一个点
point(30, 30);
point(20, 20);

等等。我想要实现的是将这些功能包装到我自己的classes中,例如

class Point {
  float xPos;
  float yPos;

  Point(float x, float y) {
    xPos = x;
    yPos = y;
    point(x, y);
  }
}

Point p = new Point(10,10);

这听起来可能很愚蠢,但这样我可以更好地使用面向对象的方法。

现在我的问题如下:假设我构建了十几个这样的 classes 并想在图书馆中使用它们,以便学生可以简单地使用

import myLibrary:
Point P = new Point(10, 10);

我该怎么做?我知道官方网站上有一个教程,展示了在 Eclipse 中创建一个简单的库,但是我不能在 Java 中使用任何处理功能,可以吗?我想我的点 class 的构造函数不会因此而工作。

感谢任何帮助

里科吉尔

您只需将所有 类 打包成一个 jar fie 即可实现,但在创建 jar 文件之前,不要忘记将所有 类 添加到一个包中,也许是 org,在您之后已经创建了一个 jar 文件,然后你可以将它添加到你的类路径中,然后你就可以使用它了。 如果您使用的是 eclipse,那么请查看 here 如何在其中使用您的 jar 文件。

如果您想将 类 包装成 Processing Java 库,您应该按照 Processing Library Template 存储库中的说明进行操作。

与您通常编译 Java 库的方式相比,它有点冗长,但如果您打算将它与 Processing 的 Contribution Manager 一起使用,这是可行的方法。

如果您只想进行快速测试,请保留它 offline/manual 安装,按照典型的 java 说明编译 .jar。 (Eclipse 使这更容易)。 请记住,您仍然需要遵循处理库设置:

  1. 如果您需要在库名称中使用任何符号,请使用下划线(不要使用破折号、点或其他符号)
  2. 将 .jar 文件放在正确的文件夹中(库名与 .jar 文件名匹配:~/Documents/Processing/libraries/YourAwesomeLibrary/library/YourAwesomeLibrary.jar

I know that there's a tutorial on the official site which shows the creation of a simple library in Eclipse, but I can't use any processing functions in Java, can I?

当然可以。阅读 this tutorial 以及 George 的回答,以获取有关如何执行此操作的指南。基本上,您可以将 Processing 用作 Java 库,它使您可以访问 Processing 的 classes 和 Java 中的函数。您将在 Java 中编写您的库,将其导出为 .jar 文件,然后使用 George 的答案或将 .jar 文件直接拖到您的 Processing 中,将其添加到您的 Processing sketch 中编辑.

I guess my constructor of the point class wouldn't work because of that.

您必须将 Processing 草图的实例传递给 Point 构造函数,并使用它来访问 Processing 的函数。像这样:

class Point {
  float xPos;
  float yPos;
  PApplet sketch;

  Point(float x, float y, PApplet sketch) {
    xPos = x;
    yPos = y;
    this.sketch = sketch;
  }

  void drawMe(){
    sketch.point(xPos, yPos);
  }
}

然后在您的草图中,您将使用 this 关键字将自引用传递给库代码:

Point p = new Point(10, 10, this);
p.drawMe();

您也可以考虑简单地为您的 Point class 使用单独的选项卡,而不是整个外部库。