【问题标题】:Troubles with controlP5 and creating objectscontrolP5 和创建对象的问题
【发布时间】:2012-05-29 20:28:23
【问题描述】:

我有一个菜单系统,可以在屏幕上显示不同类型的对象。

所以基本上我已经显示了菜单,然后当你点击一个选项时,它会调用一个名为 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;
         }
      }
    }
  }
}

编辑:还应该添加错误代码...

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

【问题讨论】:

    标签: java object listbox controls


    【解决方案1】:

    你检查了吗

    int Type[]; 
    

    在调用newShape(int) 时,在您的 Draw Shape 文件中不是 null

    【讨论】:

    • 你的意思是传递给Type[]的变量吗?这是正确的。
    • 嗯,我尝试手动为 Type[0] 分配一个值 (-1),但出现此错误... processing.app.SketchException:意外令牌:[ at processing.mode。 java.JavaBuild.preprocess(JavaBuild.java:326) 在 processing.mode.java.JavaBuild.preprocess(JavaBuild.java:197) 在 processing.mode.java.JavaBuild.build(JavaBuild.java:156) 在 processing.mode .java.JavaBuild.build(JavaBuild.java:135) 在 processing.mode.java.JavaMode.handleRun(JavaMode.java:176) 在 processing.mode.java.JavaEditor$20.run(JavaEditor.java:481) 在 java .lang.Thread.run(Thread.java:662)
    【解决方案2】:

    好的,问题是数组没有初始化。

    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];
    

    【讨论】:

      猜你喜欢
      • 2015-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多