Processing 按BACKSPACE键并仅删除一个形状

Processing 按BACKSPACE键并仅删除一个形状,processing,shapes,backspace,Processing,Shapes,Backspace,我已经为一个“生成性”徽标{像这样}创建了一个代码(它在一开始,所以不是完整的),我希望在按下一次BACKSPACE时,我可以返回一个形状。现在就像我有我的代码一样,当我按Backspace键时,它会删除所有内容 代码如下: 导入控制p5.*; 控制p5-cp5; 字符串textValue=“”; 字符串val; 无效设置(){ 规模(700800); PFont font=createFont(“arial”,20); cp5=新控制P5(本); cp5.addTextfield(“输入”)

我已经为一个“生成性”徽标{像这样}创建了一个代码(它在一开始,所以不是完整的),我希望在按下一次BACKSPACE时,我可以返回一个形状。现在就像我有我的代码一样,当我按Backspace键时,它会删除所有内容

代码如下:

导入控制p5.*;
控制p5-cp5;
字符串textValue=“”;
字符串val;
无效设置(){
规模(700800);
PFont font=createFont(“arial”,20);
cp5=新控制P5(本);
cp5.addTextfield(“输入”)
.设置位置(宽度/2-100600)
.设置大小(200,40)
.setFont(字体)
.setFocus(真)
.setColor(颜色(255255))
;
文本字体(字体);
背景(0);
仰泳();
}
作废提款(){
如果(按键){
如果(键=='o'| |键=='o'){
填充(205、152、59、100);
椭圆(宽/2,高/2,50,50);
} 
如果(键=='b'| |键=='b'){
填充(20、84、42、100);
矩形模式(中心);
矩形(宽度/2,高度/2,50,50);
}
} 
如果(key==BACKSPACE){//This reset all,我只想重置最后一个形状
背景(0);
}
val=cp5.get(Textfield.class,“INPUT”).getText();
println(val.length());
}

谢谢

如果您希望能够更改屏幕上绘制的内容,则必须采用以下方法:

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

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


步骤3:要修改屏幕上的内容,只需修改数据结构中的内容即可。对于您来说,您可以删除
数组列表
最后一个位置的
圆圈
,另一个选项是使用For循环遍历文本字符串的每个字符并绘制相应的形状

for循环可能因为其语法而看起来很复杂,但如果将其视为在给定的次数/步骤内重复一组指令的一种方式,那也不算太糟糕。语法大致如下:

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步骤=0;步骤<10;步骤=步骤+1){
println(“阶跃索引:+i);
}
如果您可以一次完成一个步骤,还可以跳:

for(int step = 0 ; step < 10 ; step = step+2){
       println("step index: " + i); 
    }
for(int步骤=0;步骤<10;步骤=步骤+2){
println(“阶跃索引:+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 text=“go”;
对于(int-letterIndex=0;letterIndex
上面的代码段使用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);
    } 
  }
}
导入控制p5.*;
控制p5-cp5;
无效设置(){
规模(700800);
PFont font=createFont(“arial”,20);
cp5=新控制P5(本);
cp5.addTextfield(“输入”)
.设置位置(宽度/2-100600)
.设置大小(200,40)
.setFont(字体)
.setFocus(真)
.setColor(color(255255));
文本字体(字体);
背景(0);
仰泳();
}
作废提款(){
背景(0);
//获取文本字符串
String text=cp5.get(Textfield.class,“INPUT”).getText();
//循环遍历每个字符
对于(int-letterIndex=0;letterIndex
以后,请提供一个。你的问题与ControlP5无关,所以所有的代码都是多余的。首先感谢你的回答。对于步骤1,您告诉我创建一个Circle类,您的意思是创建一个变量INT还是。。。?第二步,我只调用了一次虚线图,你是说每次我调用If也调用“else background”吗?我事先向你道歉,但我只是对这个程序不太实际,我也不太明白,用“代码”说话,你说我应该在程序上写些什么?@Carol我建议的
课就是一个例子。现在看看您的代码,您最好使用现有的
PShape
类,您可以在中阅读。而且您根本不调用
draw()
函数,Processing每秒自动调用它60次。如果你被卡住了,我建议你尝试一下,然后在新的帖子里再发一个问题。好的,我会试试的!再次非常感谢。哇,这是我需要的代码!真的非常感谢你,你消除了我所有的疑虑!再一次,非常感谢。很高兴这有帮助。请记住,重复字母将重新绘制形状(例如,在文本字段中键入“bobo”以了解我的意思)。这是你在程序中可能想要或不想要的东西