Изображение не исчезает. Изображение просто меняется, потому что у вас есть только 1 изображение (img
). Вся сцена перерисовывается в каждом кадре, поэтому вы можете просто видеть «текущее» изображение.
Создайте класс MyImage
, который может рисовать изображение и изменять положение изображения:
class MyImage {
PImage img;
int x, y;
MyImage(PImage img, int x, int y) {
this.img = img;
this.x = x;
this.y = y;
}
void changePosition(int dx, int dy) {
this.x += dx;
this.y += dy;
}
void draw() {
image(img, x, y);
}
}
Используйте ArrayList
для управления несколькими изображениями:
ArrayList<MyImage> images = new ArrayList<MyImage>();
Добавление нового изображения при нажатии t :
String path = selection.getAbsolutePath();
PImage image = loadImage(path);
images.add(new MyImage(image, 0, 0));
Нарисуйте все изображения в al oop
for (int i = 0; i < images.size(); i++) {
MyImage img = images.get(i);
img.draw();
}
Воспользуйтесь обратным вызовом события mouseDragged()
, чтобы перетащить последнее изображение в списке:
void mouseDragged() {
if (images.size() > 0) {
images.get(images.size()-1).changePosition(mouseX-pmouseX, mouseY-pmouseY);
}
}
См. Пример:
class MyImage {
PImage img;
int x, y;
MyImage(PImage img, int x, int y) {
this.img = img;
this.x = x;
this.y = y;
}
void changePosition(int dx, int dy) {
this.x += dx;
this.y += dy;
}
void draw() {
image(img, x, y);
}
}
ArrayList<MyImage> images = new ArrayList<MyImage>();
void setup() {
size(1000, 800);
}
void draw() {
background(204);
for (int i = 0; i < images.size(); i++) {
MyImage img = images.get(i);
img.draw();
}
text("Press 't' to load an image", 40, 100);
}
void handleImage(File selection) {
if (selection == null) {
println ("nono");
}
else {
String path = selection.getAbsolutePath();
PImage image = loadImage(path);
images.add(new MyImage(image, 0, 0));
}
}
void mouseDragged() {
if (images.size() > 0) {
images.get(images.size()-1).changePosition(mouseX-pmouseX, mouseY-pmouseY);
}
}
void keyPressed() {
if(key == 't') {
selectInput("select an image", "handleImage");
}
}