微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

多色矩形

如何解决多色矩形

我的目标是创建多色矩形,当“左键单击”时会变大,而“右键单击”时会变小。我还想添加一个键盘按键,该按键可以在按下时更改其颜色。

我的代码存在以下问题:

  1. “超出范围的异常”-如何解决此问题?如果它到达索引的末尾,我希望它停留在最后一个索引,并且不会抛出超出范围的错误

  2. 在“ draw()”内部调用“ keypressed()”时,矩形会不断更改其颜色。

当我在“ 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 举报,一经查实,本站将立刻删除。