2016-07-08 76 views
-1

我想要創建一個處理庫,它將一個函數添加到Processing中。一個命令。我該怎麼做呢?如何創建一個爲語言添加新功能的處理庫?

所以我希望能夠在處理此寫:

void setup() { 
    drawMyCustomShape() 
} 

在某種程度上這drawMyCustomShape將是我的自定義庫的實現。

謝謝!

注意:這個問題不是關於在處理中創建一個新的庫。是關於創建一個導出一個新命令的庫(因此您可以在不關心容器類實例的情況下使用它)。

回答

0

首先,你確定你確實需要創建一個完整的庫嗎?您可以將該類添加到草圖中,而無需將其部署爲庫。如果你擔心混亂,就把它放在自己的標籤中。

如果你真的需要創建一個數據庫,然後有您需要閱讀三個教程:

但基本上,你需要創建一個使用Processing作爲庫的Java項目(在像eclipse這樣的IDE中,或者使用基本的文本編輯器和命令行)。那就是你把MyLibrary課的地方。然後,您將其導出爲.jar文件,然後將該文件導入到Processing中。然後,您就可以像使用任何其他Processing庫一樣使用您的課程。

您建議的安裝程序還有其他一些問題(您將如何訪問static函數中的sketch變量?),但是我建議在您掌握基本知識之後將它們作爲單獨的問題來處理。

+0

嗨!謝謝回答。我瞭解創建新庫的基本概念。我需要它作爲圖書館,因爲我將在大學課堂中使用它,我需要隱藏學生的實施。我的**特定需求**是爲庫添加一個處理命令,如上例所示。我不知道這是如何完成的。也許這不是做一個靜態函數。我將編輯這個問題,以消除我對靜態方法的看法,這似乎使它變得混亂。 –

+0

@AryPabloBatista嗯,我想我的答案仍然是答案。如果你想創建一個庫,那麼你將不得不按照我列出的步驟。除非從源代碼構建處理本身並以這種方式添加函數,否則您無法簡單地向Processing處理添加函數。處理是開源的,所以這是可行的,但請注意,以上都不會100%阻止惡作劇的學生反編譯源代碼並進行實施。 –

0

聽起來好像你實際上正在創建你自己的Processing庫的擴展,就像在實際改變核心jar文件一樣。

您可以通過在Github上分叉它的主分支來擴展實際的Processing庫。通過將函數drawMyCustomShape寫入分叉版本的實際內核中,可以從代碼副本中構建處理開發環境。使用PDE的特定副本,您可以執行您所描述的內容。

一旦你編譯這個版本,你實際上可以將這個PDE的副本分發給你的大學生。他們將能夠使用你的功能,就好像什麼都沒有改變。 (我猜這是針對大學級別的初級班,所以這就是爲什麼你必須隱藏學生的實施?)

下面是一些鏈接,讓你開始:

0

所以,最後我發現我的情況最適當的答案。

解決方案是實現新的處理模式,它擴展了內置的Java模式。要將靜態成員包含到主處理程序中,您需要將新的靜態導入添加到處理添加到代碼中的靜態導入。

您可以通過派生該@joelmoniz從@martinleopold創建模式模板3.0做到這一點: https://github.com/joelmoniz/TemplateMode/tree/3.0-compatibility

有一個很好的教程在這裏: http://pvcresin.hatenablog.com/entry/2016/03/17/210135

爲什麼是最合適的解決方案? :我認爲這是實現處理代碼中的新靜態方法並確保輕鬆分發的最佳方式!您只需在sketchbook/modes文件夾中設置模式文件夾。如果我要進行分叉處理,那麼爲所有操作系統準備分發版並且隨時更新主項目將是一件大事。

我的特定解決方案

加我的靜態導入到處理我實現了,我推翻了PdePreprocessor類與所有的Java代碼處理。第包裹處理代碼的自定義模式。所以,這個想法是在生成的Java源代碼中生成PdePreprocessor導入的更多導入。

在我的自定義PdePreprocessor我覆蓋了getCoreImports方法來添加我的自定義方法。我在這裏做了這個,因爲我認爲新的導入是我自定義模式核心的一部分。您也可以通過重寫writeImports方法來實現此目的。

爲了用我的PdePreprocessor實現我不得不推翻以下類:

  • Commander
  • JavaBuild
  • JavaEditor
  • JavaMode
  • JavaEditor

我不得不執行一個新的JavaBuild,用我的自定義PdePreprocessor預處理Sketch。並且在處理Java模式實例構建類的所有地方也使用我的自定義JavaBuild。請與我們分享是否有更好的方法來做我所做的事情。

這裏是我的解決方案的github:http://github.com/arypbatista/processing-inpr/