Создание различных объектов изображения в processing.js

#javascript #arraylist #processing.js

#javascript #arraylist #processing.js

Вопрос:

Я пытаюсь отобразить некоторые изображения в браузере, и когда вы нажимаете на изображение, вы получаете изображение, которое вы нажимаете в положении мыши, но когда я нажимаю первый элемент в массиве, ничего не происходит, но когда я нажимаю второй элемент, он отображается, но когда я снова нажимаю первый, второй отображается.снова отображается. Я предполагаю, что есть какая-то проблема со значением массива, которое оно просто изменяет только один раз и больше нет. Вот мой код:

 ArrayList<Object> objects = new ArrayList();

String pic ;
PImage images [];
PImage image;
int x;
int y;
int pad = 10;
int bs = 70;
String val ="index.jpg images.jpg";
String[] list;

void setup() {
  size(500, 500);
  change(val);
}

void draw() {
background(150);
  for (int i = 0; i < images.length; i  ) { 
    x = pad   (bs pad)*i;
    y = pad;
    image(images[i], x, y, bs, bs);
    over();
  }
  for (Object o : objects) {
    o.show();
  }
}

void over() {
  for (int i = 0; i < images.length; i  ) { 
    if (mouseX >= x amp;amp; mouseX <= x width/x bs*i amp;amp; 
      mouseY > y amp;amp; mouseY <= pad bs) {
      fill(255);
      println(images[i]);
      image = images[i];
      rect(x, y, bs, bs);
    }
  }
}
void mousePressed() {
  for (int i = 0; i < images.length; i  ) { 
    if (mouseX >= x amp;amp; mouseX <= x width/x bs*i amp;amp; 
      mouseY > y amp;amp; mouseY <= pad bs) {
      float xpos = mouseX;
      float ypos = mouseY;
      objects.add(new Object(xpos, ypos, image));
    }
  }
}

void mouseDragged() {
  for (Object o : objects) {
    o.moove();
  }
}


/* ---------------------------------------------*/

void change(String val) {
  list = split(val, " ");
  images = new PImage[list.length];
  for (int i = 0; i < list.length; i  ) {    
    images[i] = loadImage(list[i]);
  }
}
  

И объект находится здесь:

 class Object{
float x;
float y;
PImage img;
int block = 50;

  Object(float tmpx, float tmpy, PImage tmpimg){
    x = tmpx;
    y = tmpy;
    img = tmpimg;
  }

void show (){
  image(img,x,y,block,block);
}

  void moove() {
      x = mouseX - block/2;
      y = mouseY - block/2;
  }

}
  

Комментарии:

1. В over() методе, возможно, измените if (mouseX >= x amp;amp; mouseX <= x width/x bs*i amp;amp; mouseY > y amp;amp; mouseY <= pad bs) { на if (mouseX >= x amp;amp; mouseX < x bs amp;amp; mouseY >= y amp;amp; mouseY < y bs) { . Если я прав, предполагая, что размер изображения должен быть 70×70, исходя bs из, то это должно делать то, что вы хотите. Но я на самом деле не пробовал код.

Ответ №1:

Время для отладки вашего кода.

Я бы начал с рисования кругов в точках интереса. Например, рисование круга в x,y показывает нам, что x,y указывает на верхний левый угол второго изображения. Вы уверены, что это то, что вы хотите?

Вероятно, это не так, потому что вы хотите иметь возможность проверять оба изображения по отдельности. Чтобы исправить это, я бы, честно говоря, просто избавился от x и y в качестве глобальных переменных и просто выполнял вычисления в каждом из ваших for циклов для каждого изображения.

Кроме того, обратите внимание, что довольно плохая практика иметь класс с именем Object . Это может ничего не нарушить (особенно, если вы используете режим JavaScript), но в лучшем случае это приведет к путанице. Лучше использовать более описательные имена классов, например ImageAtPoint , или что-то в этом роде.

Комментарии:

1. Спасибо за предложения, я воспользуюсь вашими советами, я называю свои тестовые примеры простыми именами, просто чтобы все работало, и после этого, когда я буду реализовывать свой код, я постараюсь правильно называть вещи. Но я обнаружил свою ошибку в той части кода, где я создаю сам объект (mousePressed(){} function) , я проверяю положение мыши, и это тормозит мой код, по какой-то причине я удаляю этот код, и теперь все работает. Еще раз спасибо за дополнения и помощь.