0

画面に描画できるさまざまな種類のオブジェクトを表示するメニュー システムがあります。

つまり、基本的にメニューが表示され、オプションをクリックすると 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
4

2 に答える 2

0

チェックしましたか

int Type[]; 

null呼び出すときではなく、Draw Shape File ins 内にnewShape(int)?

于 2012-05-30T06:46:29.017 に答える
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];
于 2012-05-30T16:47:28.930 に答える