KeyPressed BACKSPACE 并只删除一个形状

KeyPressed BACKSPACE and delete just one shape

我已经为 "generative" 徽标创建了一个代码 {Like this http://ebologna.it/ }(它在开头所以还不完整),我希望在按一次 BACKSPACE I可以返回一个形状。现在我有了我的代码,当我按退格键时,它会删除所有代码。

代码如下:

import controlP5.*;

ControlP5 cp5;

String textValue = "";
String val;

void setup() {
   size(700,800);

  PFont font = createFont("arial",20);

  cp5 = new ControlP5(this);

  cp5.addTextfield("INPUT")
     .setPosition(width/2-100,600)
     .setSize(200,40)
     .setFont(font)
     .setFocus(true)
     .setColor(color(255,255,255))

     ;

  textFont(font);
  background(0);
  noStroke();
}
void draw() {


  if (keyPressed) {

    if (key == 'o' || key == 'O') {
      fill(205, 152, 59, 100);
      ellipse(width/2, height/2, 50, 50);
    } 

      if (key == 'b' || key == 'B') {
        fill(20, 84, 42, 100);
        rectMode(CENTER);
        rect(width/2, height/2, 50, 50);
      }
    } 
    if (key == BACKSPACE) {    //This reset all, I want to reset just the last one shape
  background (0);
}

val = cp5.get(Textfield.class,"INPUT").getText();
 println(val.length());

}

谢谢!

如果您希望能够更改屏幕上绘制的内容,您将不得不采用这种方法:

第 1 步:将需要绘制到屏幕上的所有内容存储在数据结构中。对于您来说,这可能是一个 ArrayList,其中包含您创建的 Circle class 的实例。

第二步:每次调用draw()时,通过调用background()函数清除之前的帧,然后绘制数据中的所有内容结构到屏幕。

第3步:要修改屏幕上的内容,只需修改数据结构中的内容即可。对于您,您可以删除 ArrayList.

最后位置的 Circle

另一种选择是使用 for 循环遍历文本字符串的每个字符并绘制相应的形状。

for 循环可能看起来很复杂,因为它的语法,但如果您将其视为对给定数量的 times/steps 重复一组指令的一种方式,它并不算太糟糕。语法大致如下:

for( intial step ; condition to stop ; incrementation ){
//something to repeat while the condition to stop is still false
}

想想走 10 步,一次一步:

for(int step = 0 ; step < 10 ; step = step+1){
   println("step index: " + i); 
}

如果你能一步一步,你也可以跳:

for(int step = 0 ; step < 10 ; step = step+2){
       println("step index: " + i); 
    }

回到您的挑战,您可以使用 for 循环遍历文本的每个字符。例如:

String text = "go";
for(int letterIndex = 0 ; letterIndex < text.length(); letterIndex = letterIndex + 1){
    //get the character
    char letter = text.charAt(letterIndex);
    println(letter);
}

上面的代码片段使用 String 的 length() function to retrieve the number of characters and the charAt() 通过它在 String

中的索引检索字符

应用于您的代码:

import controlP5.*;

ControlP5 cp5;



void setup() {
   size(700,800);

  PFont font = createFont("arial",20);

  cp5 = new ControlP5(this);

  cp5.addTextfield("INPUT")
     .setPosition(width/2-100,600)
     .setSize(200,40)
     .setFont(font)
     .setFocus(true)
     .setColor(color(255,255,255));

  textFont(font);
  background(0);
  noStroke();
}
void draw() {
  background (0);
  //get the text string
  String text = cp5.get(Textfield.class,"INPUT").getText();
  //loop through each character
  for(int letterIndex = 0 ; letterIndex < text.length(); letterIndex = letterIndex + 1){
    //get the character
    char letter = text.charAt(letterIndex);
    //draw the coresponding shape
    if (letter == 'o' || letter == 'O') {
      fill(205, 152, 59, 100);
      ellipse(width/2, height/2, 50, 50);
    } 
    if (letter == 'b' || letter == 'B') {
      fill(20, 84, 42, 100);
      rectMode(CENTER);
      rect(width/2, height/2, 50, 50);
    } 
  }
}