2017-03-28 2 views
1

Ich möchte folgendes und haben keine wirkliche Idee tun, wie es, vielleicht kann jemand getan werden kann helfen:eine kleine Bibliothek in Verarbeiters

Ich möchte eine kleine Bibliothek in Bearbeitung schreiben, die Programmierung objektorientierte macht Konzepte für Studenten. Ich werde Ihnen ein kleines Beispiel geben:

Bei der Verarbeitung habe ich einfach einen Punkt irgendwo in einer Skizze erstellen konnte durch

point(30, 30); 
point(20, 20); 

eingeben und so weiter. Was ich erreichen möchte, ist, diese Funktionen in meine eigenen Klassen einzubetten, z.

class Point { 
    float xPos; 
    float yPos; 

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

Point p = new Point(10,10); 

Das klingt vielleicht dumm, aber auf diese Weise kann ich einen objektorientierten Ansatz besser verwenden.

Meine Frage ist nun folgendes: Lassen Sie uns sagen, dass ich ein paar Dutzend Klassen wie das bauen und sie in einer Bibliothek verwendet werden soll, so dass die Schüler einfach

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

verwenden Wie kann ich das tun? Ich weiß, dass es auf der offiziellen Website ein Tutorial gibt, das die Erstellung einer einfachen Bibliothek in Eclipse zeigt, aber ich kann keine Verarbeitungsfunktionen in Java verwenden, oder? Ich denke, mein Konstruktor der Punktklasse würde deswegen nicht funktionieren.

schätzen ich Hilfe

rikojir

+0

was ist Punkt (x, y); in Ihrem Konstruktor? Außerdem sollte es in Ihrem Programm Setter und Getter-Methode geben, um auf x und y zuzugreifen. – Omore

Antwort

1

ich weiß, dass es ein Tutorial auf der offiziellen Website, die die Schaffung eines einfachen Bibliothek in Eclipse zeigt, aber ich kann keine Verarbeitungsfunktionen in Java verwenden, oder?

Sicher kannst du. Lesen Sie this tutorial, zusammen mit Georges Antwort, für Anleitungen, wie man das macht.Grundsätzlich können Sie die Verarbeitung als Java-Bibliothek verwenden, die Ihnen Zugriff auf die Klassen und Funktionen von Processing in Java ermöglicht. Sie würden Ihre Bibliothek in Java schreiben, sie als .jar-Datei exportieren und dann entweder mit Georges Antwort oder durch Ziehen der .jar-Datei direkt in Ihren Verarbeitungseditor zu Ihrer Verarbeitungsskizze hinzufügen.

Ich denke, mein Konstruktor der Punktklasse würde deswegen nicht funktionieren.

Sie würden in einer Instanz der Verarbeitung Skizze zu Ihrem Point Konstruktor übergeben haben und dass die Verarbeitung der Funktion für den Zugriff verwenden. Etwas wie folgt aus:

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); 
    } 
} 

Dann in Ihrer Skizze, dann würden Sie das this Schlüsselwort in einem selbst Verweis auf die Bibliothek Code weitergeben müssen:

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

Sie könnten auch einfach über ein separates betrachten Registerkarte für Ihre Point Klasse anstelle einer gesamten externen Bibliothek.

+0

Vielen Dank, ich habe es jetzt zur Arbeit. Ich habe noch einige offene Fragen: Natürlich könnte ich jetzt anfangen, viele Klassen mit ihren eigenen Methoden und Gettern und Setter zu schreiben und so weiter. Worüber ich mich wundere ist, warum ich meine Variablen (z. B. eine neue Point-Instanz) nicht in der Setup-Funktion deklarieren kann und sie dann in der draw() - Funktion verwenden kann, die in einer Schleife aufgerufen wird. Kann mir das jemand erklären, oder gibt es eine Möglichkeit, Variablen zu verwenden, die in der Funktion setup() in der Funktion draw() deklariert sind? Ansonsten müsste ich jedes Mal eine Animation oder eine Spielschleife selbst implementieren. – rikojir

+1

@rikojir Wenn Sie ** eine Variable in Ihrer 'setup()' -Funktion deklarieren, dann ist diese Variable nur ** im Bereich ** innerhalb der 'setup()' -Funktion. Wenn Sie jedoch die Variable an der Spitze Ihrer Skizze deklarieren und ** in der Funktion 'setup()' initialisieren **, können Sie auf diese Variable in Ihrer Funktion 'draw()' zugreifen. Das ist ein Standard in der Verarbeitung. Schamlose Eigenwerbung: Siehe den Abschnitt ** scope ** in [diesem Tutorial] (http://happycoding.io/tutorials/processing/animation) für eine detailliertere Erläuterung und Beispielcode. –

0

Sie können erreichen, ist es ein Glas fie nur Kiste alle Klassen, aber bevor eine jar-Datei zu erstellen, vergessen Sie nicht alle Klassen in einem einzigen Paket hinzufügen vielleicht org, nachdem Sie eine JAR-Datei erstellt haben, können Sie sie entweder Ihrem Klassenpfad hinzufügen und Sie können ihn verwenden. Wenn Sie ecllipse verwenden, dann sehen Sie here, wie Sie Ihre JAR-Datei darin verwenden.

+0

Okay, aber wie füge ich meine Klassen zu den Kernfunktionalitäten hinzu? Ich kann sie schreiben, aber ich brauche die core.jar-Datei von Processing für meine Bibliothek, wenn ich nicht falsch liege. Wie verpacke ich diese beiden? Ich möchte meine Bibliothek später in der Processing IDE verwenden, wenn das möglich ist – rikojir

1

Wenn Sie Ihre Klassen in eine Processing Java Library einbinden möchten, sollten Sie die Anweisungen auf dem Processing Library Template Repository befolgen.

Es ist ein wenig langatmig verglichen mit dem, wie Sie normalerweise eine Java-Bibliothek kompilieren würden, aber das ist der Weg zu gehen, wenn Sie vorhaben, es mit dem Contribution Manager von Processing zu verwenden.

Wenn Sie nur einen schnellen Test durchführen möchten, halten Sie ihn offline/manuelle Installation, befolgen Sie die typischen Java-Anweisungen zum Kompilieren eines .jar. (Eclipse macht das einfacher). Denken Sie daran, müssen Sie noch die Verarbeitung Bibliothek Setup folgen werden:

  1. Wenn Sie Symbole in der Bibliothek Namen verwenden müssen, verwenden Sie Unterstrichen (verwenden Sie keine Striche, Punkte oder andere Symbole)
  2. Legen Sie die .jar-Datei in den richtigen Ordner (Bibliothek Namen übereinstimmt .jar-Datei Name: ~/Documents/Processing/libraries/YourAwesomeLibrary/library/YourAwesomeLibrary.jar)