使用数组时图像 - 鼠标交叉/悬停效果问题

时间:2013-11-19 05:42:10

标签: java arrays processing

我正在进行一项涉及制作六个模具面的界面的小练习。我的目标是当我将鼠标悬停在每个模具面上时改变颜色。我遇到的问题是我只能改变第一个模具面的颜色,而不是前进的颜色。我一直不愿意来这里问,因为我觉得我的问题是如此微不足道,但我一直试图让这个问题在过去的4天里发挥作用,我无法弄明白。我觉得有一些关于迭代的事情,我还没有理解。

Dice[] dice = new Dice[6];
void setup(){
  size(600,100);
  for(int i = 0; i < dice.length; i++){
    dice[i] = new Dice(i*100,0,100,100);
  }
  imageMode(CORNER);
}

void draw(){
  for(int i = 0; i < dice.length; i++){
    for(int j = 0; j < dice.length; j++){
      if(j!=i && dice[i].checkHover(mouseX,mouseY)){
        dice[i].drawDice(i,true);
      } else {
        dice[i].drawDice(i,false);
      }
    }
  }
}

class Dice{
  PImage[] diceFace = new PImage[6];
  PImage[] diceFaceHover = new PImage[6];
  int x;
  int y;
  int w;
  int h;

  Dice(int bx, int by, int bw, int bh){
    x = bx;
    y = by;
    w = bw;
    h = bh;
    for(int i = 0; i < dice.length; i++){//loads the images
      diceFace[i] = loadImage(i+".png");
      diceFaceHover[i] = loadImage(i+"h.png");
    }
  }

 void drawDice(int i, boolean hover){
   if(hover){
     image(diceFaceHover[i],x,y,w,h);
   } else {
     image(diceFace[i],x,y,w,h);
   }
 }

 boolean checkHover(float mx, float my){
   if((mx > x && mx < w) && (my > y && my < h)){
     return true;
   } else {
     return false;
   }
 }
}

我会在此期间继续寻找解决方案。

1 个答案:

答案 0 :(得分:2)

您检查悬停的条件不佳。不要忘记wh对于所有骰子都相同,但您需要的位置不是大小。

if( (mx > x & mx < x+w) && ( my >y && my < y+h ) )