首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理:获取PGraphics对象的位置

处理:获取PGraphics对象的位置
EN

Stack Overflow用户
提问于 2014-08-13 13:17:52
回答 1查看 932关注 0票数 1

嗨,我需要用处理来制作一些小部件,为此,我正在考虑用一个定制的PGraphics子类包装东西。然后我就能把他们拖来拖去。

当前的问题是,如何获得PGraphics对象的位置?

代码语言:javascript
复制
PGraphics widg;
void setup(){
  widg=createGraphics(50,50);
  drawWidg();
  image(widg,10,10);
}
void draw(){

}
void mouseClicked(){
  //PGraphics doesn't have x, y properties. How to get the position of widg?
  if(mouseX-widg.x>0 && mouseX-widg.x<widg.width && mouseY-widg.y>0 && mouseY-widg.y<widg.height){  
    println("clicked!");
  }
}
void drawWidg(){
  widg.beginDraw();
  ...
  widg.endDraw();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-13 15:00:56

PGraphic没有真正的坐标,但是你需要用一些来显示它,对吗?这些是你的坐标。在上面的代码中,它们将与调用image()时使用的(10,10)以及PGraphic宽度/高度一起使用。

mousePressed中的代码是:

代码语言:javascript
复制
void mouseClicked(){
   if(mouseX > 10 && mouseX < 10 + widg.width &&
      mouseY > 10 && mouseX < 10+ widg.height){  
    println("clicked!");
  }
}

现在这并不是很好。因为它有那些硬数字。因此,为了避免这种情况,您可以使用PVector来存储以下位置:

代码语言:javascript
复制
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类。类似于:

代码语言:javascript
复制
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;
  }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25287329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档