1

我正在尝试添加一个功能,您可以在其中单击草图的不同部分并随机生成图像。它第一次工作,但是当我添加另一个如果鼠标按下功能时,它会触发所有鼠标按下的代码并且所有图像集同时消失。我不知道如何隔离它,如果它在正确的位置,只有一个会熄灭。

这是我最后一次尝试的代码,我尝试使用推送和弹出矩阵隔离鼠标按下功能,但没有成功。

PImage stage;
PImage model;
PImage [] hat = new PImage [5];
PImage [] pants = new PImage [4];
PImage [] shirt = new PImage [5];

int choice = 0;

int page = 0;


void setup() {
  size (800, 800);
  stage = loadImage("background.png");
  background(255);
  image(stage, 0, 0);

  hat[0] = loadImage ("hat1.png");
  hat[1] = loadImage ("hat2.png");
  hat[2] = loadImage ("hat3.png");
  hat[3] = loadImage ("hat4.png");

  pants[0] = loadImage ("pant1.png");
  pants[1] = loadImage ("pant2.png");
  pants[2] = loadImage ("pant3.png");
  pants[3] = loadImage ("pant4.png");
}


void draw() {

  println(mouseX, mouseY); //398, 237 for hats.
  image(stage, 0, 0);

  pushMatrix();
  if (dist(398, 237, mouseX, mouseY) <90 && mousePressed) choice = floor(random(4));
  image(hat[choice], 349, 98);
  popMatrix();

  pushMatrix();
  if (dist(404, 363, mouseX, mouseY) <90 && mousePressed) choice = floor(random(4));
  image(pants[choice], 228, 263);
  popMatrix();
}
4

2 回答 2

1

问题是您对所有服装项目使用相同的变量。因此,当您单击帽子按钮时,它会设置choice为一个随机数(比如说 2)。然后你显示hat[choice],然后你显示pants[choice]。解决此问题的一种方法是使用多个不同的choice变量,hatChoice并且pantsChoice. 当你点击帽子按钮时,它会随机化hatChoice,当你点击裤子按钮时,它会随机化pantsChoice。像这样的东西:

if (dist(398, 237, mouseX, mouseY) <90 && mousePressed) hatChoice = floor(random(4));
image(hat[hatChoice], 349, 98);

if (dist(404, 363, mouseX, mouseY) <90 && mousePressed) pantsChoice = floor(random(4));
image(pants[pantsChoice], 228, 263);

我还支持@rjw1428的建议,即使用mouseClicked()而不是if (mousePressed). 你可以这样做:

//your global variables...
int hatChoice = 0;
int pantsChoice = 0;

void setup() {
  //your setup stuff...
}

void draw() {
  image(stage, 0, 0);
  image(hat[hatChoice], 349, 98);
  image(pants[pantsChoice], 228, 263);
}

void mouseClicked() {
  if (dist(mouseX, mouseY, 398, 237) < 90) {
    hatChoice = floor(random(4));
  }
  if (dist(mouseX, mouseY, 404, 363) < 90) {
    pantsChoice = floor(random(4));
  }
}
于 2021-05-11T22:58:09.280 回答
0

这不是一个完美的解决方案,但要实现你想要做的事情,我可能会这样做

PImage stage;
PImage model;
PImage [] hat = new PImage [5];
PImage [] pants = new PImage [4];
PImage [] shirt = new PImage [5];

int selectedHat = -1;
int selectedPants = -1;
int selectedShirt = -1;

int choice = 0;
int page = 0;


void setup(){
  size (800,800);
  stage = loadImage("background.png");
  background(255);
  image(stage,0,0);
  initializeImages()
}


void draw(){
  println(mouseX, mouseY); //398, 237 for hats.
  image(stage,0,0);

  if (selectedHat > 0) {
    image(hat[selectedHat], 349,98);
  }

  if (selectedPants > 0) {
    image(pants[choice], 228,263);
  }
}

void mouseClicked() {
  if(dist(404,363, mouseX, mouseY) <90 && mousePressed) {
    selectedPants = floor(random(4));
  }

  if(dist(398,237, mouseX, mouseY) <90 && mousePressed) {
    selectedHat = floor(random(4));
  }
}

void initializeImages() {
  hat[0] = loadImage ("hat1.png");
  hat[1] = loadImage ("hat2.png");
  hat[2] = loadImage ("hat3.png");
  hat[3] = loadImage ("hat4.png");

  pants[0] = loadImage ("pant1.png");
  pants[1] = loadImage ("pant2.png");
  pants[2] = loadImage ("pant3.png");
  pants[3] = loadImage ("pant4.png");
}

然后,如果您想清除,请对要选择清除的位置(按钮)进行 IF 检查,并且您的函数可以将所有“选定”值返回到 -1

于 2021-05-11T22:35:29.273 回答