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);
}
}
}
我已经为 "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);
}
}
}