2012-05-29 96 views
0

我有一個菜單系統,顯示不同類型的對象,可以在屏幕上繪製。與controlP5和創建對象的問題

所以基本上我有菜單被顯示,然後當你點擊一個選項時,它會調用一個名爲newShape()的函數,它記錄下對象的類型並給它一個初始位置。

然後,當draw()循環時,它將調用一個名爲drawShapes()的函數,該函數將使用數組中的值並創建用戶單擊的對象。然後它將跟隨用戶鼠標指針,直到它被點擊。

該代碼被分成3個文件,使其整潔。

主文件

import processing.opengl.*; 

void setup(){ 
    size(500,500,OPENGL); 
    background(255); 
    setupMenu(); 
} 

void draw(){ 
    background(255); 
    fill(0); 
    drawShapes(); 
} 

菜單文件

import controlP5.*; 

ControlP5 cp5; 
ListBox l; 
String CI[] = {"Box", "Sphere", "Ellipsoid", "Toroid", "Text"}; 

void setupMenu() { 

    cp5 = new ControlP5(this); 
    l = cp5.addListBox("createList") 
     .setPosition(0,16) 
     .setSize(120, 120) 
     .setItemHeight(15) 
     .setBarHeight(15) 
     .setColorBackground(color(40, 128)) 
     .setColorActive(color(255, 128)) 
     ; 

    l.captionLabel().toUpperCase(true); 
    l.captionLabel().set("Create Item"); 
    l.captionLabel().setColor(0xffff0000); 
    l.captionLabel().style().marginTop = 3; 
    l.valueLabel().style().marginTop = 3; 


    for (int i = 0; i < CI.length; i++){ 
    ListBoxItem lbi = l.addItem(CI[i], i); 
    lbi.setColorBackground(0xffff0000); 
    } 

} 

void controlEvent(ControlEvent theEvent) { 

    if(theEvent.isGroup() && theEvent.name().equals("createList")){ 
    int Choice = (int)theEvent.group().value();  
    newShape(Choice); 
    } 
} 

畫形文件

int ob = 0; 
int Type[]; 
float Pos[][]; 
boolean posSet[]; 

void newShape(int c){ 
    Type[ob] = c; 
    Pos[ob][0] = mouseX; 
    Pos[ob][1] = mouseY; 
    posSet[ob] = false; 
    ob++; 
} 

void drawShapes(){ 
    for (int i = 0; i < ob; i++){ 
    switch(Type[ob]){ 

     case 0: { 
     if (posSet[ob] == false){ 
      box(Pos[ob][0],Pos[ob][1], 50); 
      } 
     else { 
      box(mouseX,mouseY, 50); break; 
     } 
     } 
    } 
    } 
} 

編輯:守LD還添加了錯誤代碼......

30/05/2012 9:57:09 AM controlP5.ControlBroadcaster printMethodError 
SEVERE: An error occured while forwarding a Controller event, please check your code at controlEvent 
java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
at controlP5.ControlBroadcaster.invokeMethod(Unknown Source) 
at controlP5.ControlBroadcaster.broadcast(Unknown Source) 
at controlP5.ListBox.controlEvent(Unknown Source) 
at controlP5.Controller.broadcast(Unknown Source) 
at controlP5.Button.setValue(Unknown Source) 
at controlP5.Button.activate(Unknown Source) 
at controlP5.Button.mouseReleased(Unknown Source) 
at controlP5.Controller.setMousePressed(Unknown Source) 
at controlP5.ControllerGroup.setMousePressed(Unknown Source) 
at controlP5.ControllerGroup.setMousePressed(Unknown Source) 
at controlP5.ControlWindow.mouseReleasedEvent(Unknown Source) 
at controlP5.ControlWindow.mouseEvent(Unknown Source) 
at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at processing.core.PApplet$RegisteredMethods.handle(Unknown Source) 
at processing.core.PApplet.handleMouseEvent(Unknown Source) 
at processing.core.PApplet.dequeueMouseEvents(Unknown Source) 
at processing.core.PApplet.handleDraw(Unknown Source) 
at processing.core.PApplet.run(Unknown Source) 
at java.lang.Thread.run(Thread.java:662) 
Caused by: java.lang.NullPointerException 
at Main.newShape(Main.java:43) 
at Main.controlEvent(Main.java:104) 
... 25 more 

回答

0

有如果

int Type[]; 

你的畫形插件文件裏面沒有null調用newShape(int)當你檢查?

+0

您的意思是傳遞給Type []的變量嗎?這是正確的。 – user1410773

+0

嗯我試圖手動分配一個值(-1)類型[0],我得到這個錯誤... processing.app.SketchException:意外的標記:[ \t at processing.mode.java.JavaBuild .preprocess(JavaBuild.java:326) \t在processing.mode.java.JavaBuild.preprocess(JavaBuild.java:197) \t在processing.mode.java.JavaBuild.build(JavaBuild.java:156) \t在processing.mode.java.JavaBuild.build(JavaBuild.java:135) \t at processing.mode.java.JavaMode.handleRun(JavaMode.java:176) \t at processing.mode.java.JavaEditor $ 20.run(JavaEditor .java:481) \t at java.lang.Thread.run(Thread.java:662) – user1410773

0

好,所以問題是數組未初始化。

int Type[]; 

本來應該...

int[] Type = new int[size]; 

我不知道我需要什麼尺寸爲陣......所以我只是把一個較大的值。這裏是所有的代碼聲明...

int ob = 0, maxShapes = 300, currentShape; 
int[] Type = new int[maxShapes]; 
float[][] Pos = new float[maxShapes][maxShapes]; 
boolean[] posSet = new boolean[maxShapes];