如何解决多色矩形
我的目标是创建多色矩形,当“左键单击”时会变大,而“右键单击”时会变小。我还想添加一个键盘按键,该按键可以在按下时更改其颜色。
我的代码存在以下问题:
当我在“ setup()”内部调用“ keypressed()”时,我失去了mousepressed()函数。
我如何结合这两个具有静态矩形的功能,这些矩形仅在按下键盘时更改颜色,而在按下鼠标按钮时变大或变小?
int[] numberOfChoices = {5,10,20,25,50,100,125,250}; //an array that defines the sizes of rectangles
int arrayNum;
void setup(){
size(500,500);
}
void draw(){
keypressed();
}
void keypressed(){
for(int x = 0; x < width; x+=numberOfChoices[arrayNum]){
for(int y = 0; y < height; y+=numberOfChoices[arrayNum]){
fill(random(255),random(255),random(255));
rect(x,y,numberOfChoices[arrayNum],numberOfChoices[arrayNum]);
}
}
}
void mousepressed(){
if(mouseButton==LEFT){
arrayNum +=1;
}
else arrayNum-=1;
}
解决方法
使用%
余数运算符将arrayNum
留在边界内。为此,您需要在减去一个时替换加长。
void mousePressed() {
if (mouseButton == LEFT) {
arrayNum = (arrayNum + 1) % numberOfChoices.length;
} else {
arrayNum = (arrayNum + numberOfChoices.length - 1) % numberOfChoices.length;
}
}
您可以使用三元条件运算符对此进行组合:
void mousePressed() {
arrayNum = (arrayNum + (mouseButton == LEFT ? 1 : numberOfChoices.length - 1)) % numberOfChoices.length;
}
如果您不喜欢使用余数运算符,则始终可以使用if
语句来做到这一点:
void mousePressed() {
if (mouseButton == LEFT) {
arrayNum++;
if (arrayNum >= numberOfChoices.length)
arrayNum = 0; // roll over to first choice
} else {
arrayNum--;
if (arrayNum < 0)
arrayNum = numberOfChoices.length - 1; // roll over to last choice
}
}
或者如果您不想进行过渡:
void mousePressed() {
if (mouseButton == LEFT) {
// Increment if before last choice
if (arrayNum < numberOfChoices.length - 1)
arrayNum++;
} else {
// Decrement if after first choice
if (arrayNum > 0)
arrayNum--;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。