2016-02-10 58 views
0

我剛學習Processing。我的背景是在ActionScript中。我正在創建一個繪製複雜對象的自定義類。作爲這個類的一部分,我多次調用createShape()。事情工作正常,直到我決定我需要自定義類來擴展PShape。現在,它不會承認我使用createShape()語法,並返回,說:「createShape()預計參數,如:createShape(PApplet,PShape)」錯誤處理:當Class文件擴展PShape時,createShape()行爲發生變化

這裏的函數,它返回一個PShape對象。它工作正常。

class MyClass 
    { 
     ... 

     PShape makeTriangle1(float w, color c) 
     { 
     strokeJoin(BEVEL); 
     PShape t = createShape(TRIANGLE, 0, 0, w, 0, 0, topBar); 
     t.setFill(c); 
     return t; 
     } 
    } 

但是當我這樣做,它返回我上面引述的錯誤:

class MyClass extends PShape 
    { 
     ... 

     PShape makeTriangle1(float w, color c) 
     { 
     strokeJoin(BEVEL); 
     PShape t = createShape(TRIANGLE, 0, 0, w, 0, 0, topBar); 
     t.setFill(c); 
     return t; 
     } 
    } 

任何想法?謝謝!

回答

2

PShape類具有名爲createShape()的函數。您可以查看在線1441 here

static protected PShape createShape(PApplet parent, PShape src) { 
    PShape dest = null; 
    if (src.family == GROUP) { 
     dest = parent.createShape(GROUP); 
     PShape.copyGroup(parent, src, dest); 
    } else if (src.family == PRIMITIVE) { 
     dest = parent.createShape(src.kind, src.params); 
     PShape.copyPrimitive(src, dest); 
    } else if (src.family == GEOMETRY) { 
     dest = parent.createShape(src.kind); 
     PShape.copyGeometry(src, dest); 
    } else if (src.family == PATH) { 
     dest = parent.createShape(PATH); 
     PShape.copyPath(src, dest); 
    } 
    dest.setName(src.name); 
    return dest; 
    } 

注意該功能的參數是一個PAppletPShape

當您在該類中擴展PShape並呼叫createShape()時,Processing認爲您正試圖調用此函數。由於你的論點不匹配,你會得到錯誤。

要修正這個錯誤,你可以通過你的小品PAppletMyClass類,並明確調用小品級createShape()功能:

int topBar = 100; 

MyClass mc; 

void setup() { 
    size(500, 500); 
    mc = new MyClass(this); 
} 

void draw() { 
    background(0); 
    shape(mc.makeTriangle1(100, #ff0000), 200, 200); 
} 


class MyClass extends PShape{ 

    PApplet sketch; 

    public MyClass(PApplet sketch){ 
    this.sketch = sketch; 
    } 

    PShape makeTriangle1(float w, color c) 
    { 
    strokeJoin(BEVEL); 
    PShape t = sketch.createShape(TRIANGLE, 0, 0, w, 0, 0, topBar); 
    t.setFill(c); 
    return t; 
    } 
} 

不過,我強烈建議你重構你的代碼,這樣你不需要再延長PShape。像這樣擴展一個Processing類似乎很奇怪。有機會你應該使用composition instead of inheritance。換句話說,你的班級有一個PShape,而不是你的班級是-aPShape

+0

謝謝。我正在以我將在ActionScript中執行的方式來處理這個問題,因爲這是我的主要參考框架。這似乎可能是我的問題的根源。 –

相關問題