Необходимо иметь возможность видеть прямоугольники, рисуемые в процессе обработки с использованием цикла for.

Для проекта я сделал код, который создает обои для компьютера с иконками. Один значок, который я установил для рисования полосы загрузки при нажатии (void mousePressed). Я хочу иметь возможность видеть, как прямоугольник (полоса загрузки) начинается в определенном месте, используя RectMode (CORNER), и ширина увеличивается каждые несколько секунд, пока полоса не заполнится примерно на 3/4, а затем остановится и останется.

пожалуйста, дайте предложения
это рисует готовую полосу, но я хочу видеть каждое приращение в течение пары секунд

void setup(){
  size(800,600);
}

void mousePressed(){
  if (mousePressed && mouseX>width/4 && mouseX<width-width/4 && mouseY>height/3 && mouseY<height-    height/3){
  rectMode(CORNER);
  noStroke();
  fill(0,180,0,180);
  for( int r = 0; r <= 7; r++){
    if (r == 1)
      i = 50;
    rect(width/2-348,height/2-35,i,height/8-4);
    if (r == 2)
      i = 150;
    rect(width/2-348,height/2-35,i,height/8-4);
    if (r == 3)
      rect(width/2-348,height/2-35,i,height/8-4);
    i = 250;
    if (r == 4)
      rect(width/2-348,height/2-35,i,height/8-4);
    i = 350;
    if (r == 5)
      rect(width/2-348,height/2-35,i,height/8-4);
    i = 450;
    if (r == 6)
      rect(width/2-348,height/2-35,i,height/8-4);
    i = 550;
    if (r == 7)
      rect(width/2-348,height/2-35,i,height/8-4);
    i = 650;
} 
}

}

person user3520918    schedule 10.04.2014    source источник
comment
извините удалил старый не видел кнопки редактирования я новый участник   -  person user3520918    schedule 11.04.2014


Ответы (2)


Использование цикла находится в обработке, определяемой функцией loop(), и может быть остановлено noLoop(), также я использую frameCount (содержит количество кадров, которые были отображены с момента запуска программы - каждый запуск функции draw()) для подсчета процента загруженного индикатора выполнения и для перестаньте загружать на 3/4 как хотите.

boolean loading = false;
int fillX = 0;

void setup()
{
  size(300,300);
  background(0);
  noLoop();  
}

void draw()
{
  stroke(255);
  fill(0);
  rect(48, 137, 204, 25);
  noStroke();
  fill(255);
  rect(51, 140, fillX, 20);

  if(loading == true)
  {       
    fillX = ((frameCount%301) / 3 * 2);    
    if(frameCount%(300*0.75) == 0)
    {
      loading = false;
      noLoop();
      frameCount = 0;
    }
  }
}

void mousePressed() {
  loading = true;
  loop();
}

RectMode(CORNER) является режимом по умолчанию, поэтому нет необходимости указывать его, если только вы не используете разные режимы в проекте.

person Majlik    schedule 11.04.2014

Вы хотите сделать что-то подобное?

int time, myWidth;
boolean loading;

void setup(){
  size(800,600);
  loading = false;
  myWidth = 0;
}

void draw(){
  drawLoadingBar();
}

void drawLoadingBar(){

  if(myWidth < width/3){
    if(loading && millis()-time > 1000){
      rect(20, height/2, myWidth, 30);
      myWidth = myWidth + 10;          
      time = millis();
    }
  }

}

void mousePressed(){
  if(loading == false){
      time = millis();  
      loading = true;
  }
}

Этот код работает, увеличивая ширину полосы на 10 каждую секунду после первого щелчка мыши.

person Jose Gonzalez    schedule 11.04.2014