Processing 按BACKSPACE键并仅删除一个形状
我已经为一个“生成性”徽标{像这样}创建了一个代码(它在一开始,所以不是完整的),我希望在按下一次BACKSPACE时,我可以返回一个形状。现在就像我有我的代码一样,当我按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(“输入”)
导入控制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”以了解我的意思)。这是你在程序中可能想要或不想要的东西