画面に描画できるさまざまな種類のオブジェクトを表示するメニュー システムがあります。
つまり、基本的にメニューが表示され、オプションをクリックすると 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