【问题标题】:Processing: Get position of PGraphics object处理:获取 PGraphics 对象的位置
【发布时间】:2014-08-13 13:17:52
【问题描述】:

您好,我需要使用 Processing 制作一些小部件,为此我正在考虑将其与 PGraphics 的自定义子类一起包装。然后我就可以拖动它们了。

目前的问题是,如何获取 PGraphics 对象的位置?

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();
}

【问题讨论】:

    标签: java processing pgraphics


    【解决方案1】:

    PGraphic 确实没有坐标,但你必须使用一些来显示它,对吧?所以这些是你的坐标。在上面的代码中,它们将是调用image() 时使用的 (10,10) 以及 PGraphic 宽度/高度。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-17
      • 1970-01-01
      • 1970-01-01
      • 2012-12-03
      • 2011-06-26
      相关资源
      最近更新 更多