PGraphic には実際には座標がありませんが、座標を使用して表示する必要がありますよね? それがあなたの座標です。image()
上記のコードでは、PGraphic の幅/高さと一緒に呼び出しで使用されるように (10,10) になります。
そして、mousePressed のコードは次のようになります。
void mouseClicked(){
if(mouseX > 10 && mouseX < 10 + widg.width &&
mouseY > 10 && mouseX < 10+ widg.height){
println("clicked!");
}
}
今、これは本当に良くありません。それはそれらの難しい数字を持っているので。したがって、PVector を使用して次のような位置を保存することを回避できます。
PGraphics widg;
PVector widgCoord;
void setup(){
widgCoord = new PVector(10, 10);
widg=createGraphics(50, 50);
drawWidg();
image(widg,widgCoord.x, widgCoord.y);
}
void draw(){
}
void mouseClicked(){
if(mouseX > widgCoord.x && mouseX < widgCoord.x + widg.width &&
mouseY > widgCoord.y && mouseX < widgCoord.y + widg.height){
println("clicked!");
}
}
void drawWidg(){
widg.beginDraw();
widg.background(255,0,0);
widg.endDraw();
}
または、おっしゃったように、PGraphics、PVector、その他必要なものを使用して Widget クラスを作成することもできます。何かのようなもの:
Widget one;
void setup() {
one = new Widget(10, 10, 50, 50);
one.drawWidg();
}
void draw() {
background(0);
one.display();
}
void mouseClicked() {
if (one.isOver()) {
println("clicked!");
}
}
class Widget {
PGraphics widg;
PVector wCoord;
color c = color(255, 0, 0);
Widget(float x, float y, int w, int h) {
wCoord = new PVector(x, y);
widg = createGraphics(w, h);
}
void drawWidg() {
widg.beginDraw();
widg.background(c);
widg.endDraw();
}
void display() {
image (widg, wCoord.x, wCoord.y);
}
boolean isOver() {
return mouseX > wCoord.x && mouseX < wCoord.x + widg.width &&
mouseY > wCoord.y && mouseX < wCoord.y + widg.height;
}
}