如何在处理中删除 2D Primitive?

Posted

技术标签:

【中文标题】如何在处理中删除 2D Primitive?【英文标题】:How to delete a 2D Primitive in processing? 【发布时间】:2021-12-29 20:18:25 【问题描述】:

我在删除 2D 图元时遇到问题,我尝试在这些图元前面创建一个矩形来隐藏它们。 但是当我点击某个地方时我必须隐藏它们,所以我猜我的draw() 超过了mouseclicked

在我的代码中,“maFenetre”是我想要隐藏/删除的内容。 所以这是我的代码:

float hauteurR = 700;
float barreFenetre = 50;
float xIcone = 80;


float x = random(0,500);
float y = random(0,800);


color rouge = #FF0000;
color blanc = #FFFFFF;

void setup() 
  //colorMode(HSB,360,100,100);
  size(1500,1500); 
  background(#C1C1C1);

  


void rectangle()
rect((x+largeurR)-xIcone,y,xIcone,barreFenetre);


void maFenetre()
      
  
  //fenetre
  noStroke();
  fill(#89E0FF);
  rectMode(CORNER);
  rect(x,y,largeurR,hauteurR);
  
  //barre croix
  rectMode(CORNER);
  fill(blanc);
  noStroke();
  rect(x,y,largeurR,barreFenetre);
  
  if ((mouseX>= (x+largeurR)-xIcone && mouseX <= x+largeurR) && (mouseY >= y && mouseY <= y+barreFenetre)) 
   fill(rouge);
   rectangle();
   


   //barre aggrandir
   
   if ((mouseX>= (x+largeurR)-xIcone*2 && mouseX <= (x+largeurR)-xIcone) && (mouseY >= y && mouseY <= y+barreFenetre)) 
   fill(#CEDDDE);
   noStroke();
   rect((x+largeurR)-xIcone*2,y,xIcone,barreFenetre);
   
  
 
 
 //barre reduire
 
   if ((mouseX>= (x+largeurR)-xIcone*3 && mouseX <= (x+largeurR)-xIcone*2) && (mouseY >= y && mouseY <= y+barreFenetre)) 
   fill(#CEDDDE);
   noStroke();
   rect((x+largeurR)-xIcone*3,y,xIcone,barreFenetre);
   
   
   
   //icone réduire
   
   stroke(#000000);
 strokeWeight(2);
 line((x+largeurR)-xIcone*2.65,y+barreFenetre/2,(x+largeurR)-xIcone*2.35,y+barreFenetre/2);
   
   
 //icone aggrandir
 
 stroke(#000000);
 strokeWeight(2);
 noFill();
 rectMode(CENTER);
 rect((x+largeurR)-xIcone*1.5,y+barreFenetre/2,20,20);
 

  //icone croix
  stroke(#030303);
  strokeWeight(2.5);
  line((x+largeurR)-xIcone*0.62,y+barreFenetre*0.35,(x+largeurR)-xIcone*0.38,y+barreFenetre*0.75);
  line((x+largeurR)-xIcone*0.62,y+barreFenetre*0.75,(x+largeurR)-xIcone*0.38,y+barreFenetre*0.35);
    
  
  
void draw() 

maFenetre();

  





void mouseReleased()
  if (mousePressed == ((mouseX>= (x+largeurR)-xIcone && mouseX <= x+largeurR) && (mouseY >= y && mouseY <= y+barreFenetre)))
  
    else
    //background(#C1C1C1);
    noStroke();
    rectMode(CORNER);
    fill(#C1C1C1);
    rect(x-1,y-1,largeurR+2,hauteurR+2);
  //maFenetre();


  
  
  
```

【问题讨论】:

【参考方案1】:

删除一个不绘制它的对象。添加一个指示是否需要绘制对象的变量。如果要隐藏(或显示)对象,请更改变量的状态:

boolean drawMyObject = true;

void draw() 
    // [...]


    rectMode(CORNER);
    if (drawMyObject) 
        rect(x, y, w, h);
    


void mouseReleased()
    if (mouseX >= x-w/2 && mouseX <= x+w/2 && mouseY >= y-h/2 && mouseY <= y+h/2)
        drawMyObject = false;
    

【讨论】:

以上是关于如何在处理中删除 2D Primitive?的主要内容,如果未能解决你的问题,请参考以下文章

核心转储,如何增加矩阵维度(可用),在 C 中释放 2d 指针时出错

Unity2d中如何删除Checkpoint信息

如何删除 2D 矢量网格中的部分路径?

如何从 2D numpy (lat,lon) 数组中删除扇区/切片?

如何在处理P3D模式下绘制2D字体?

如何在处理 P3D 模式下绘制 2D 字体?