0

だから私はJavaクラスのためにここでこのグラフィックプログラムを再現しようとしています.

これは私がこれまでに思いついたものです:

import processing.core.PApplet;

public class Assignment09b extends PApplet {

// Create arrays to stort the x & y values of the mouse
int [] xArray = new int [100];
int [] yArray = new int [100];

public void setup(){
    //Runs at 60Fps

    size(500, 500);
}

public void draw(){
    //Changes the background each frame
    background(0);

    //Stores the x&y values of the mouse in the arrays
    for (int i = 0; i < xArray.length; i++){
        xArray[i] = this.mouseX;
        yArray[i] = this.mouseY;
    }

    //SHOULD print out the snake using series of ellipses
    for (int i = 0; i < xArray.length; i++){

        //Generates a random color each time
        fill(random(255), random(255), random(255));
        ellipse(xArray[i], yArray[i], 25, 25);
    }

}
   }

問題が何であるかについて、いくつかのアイデアがあります。

  1. 私はループしているので、1つの楕円を非常に迅速に生成するだけですが、それらを同時に生成する方法がわかりません
  2. おそらくフレームレートの速度の問題でしょうか?
  3. 私は無能なプログラマーです :/

私が間違っていること、またはまったくしていないことについて、アドバイスをお願いします。ありがとうございました!

4

1 に答える 1

1

問題は、ここですべての値を同時に設定していることです。

//Stores the x&y values of the mouse in the arrays
    for (int i = 0; i < xArray.length; i++){
        xArray[i] = this.mouseX;
        yArray[i] = this.mouseY;
    }

配列内の 1 つの要素のみを更新し、他の要素を 1 つシフトさせたい場合: 「最も古い」値が出て、新しい値が入ります。手動で逆の for ループを使用できます (配列の末尾から先頭へ)。最初の要素を除く) またはarrayCopyを使用します。

private void updateArrays(int x,int y){
  arrayCopy(xArray, 0, xArray, 1, xArray.length-1);//shift all elements backwards by 1
  arrayCopy(yArray, 0, yArray, 1, yArray.length-1);//so x at index 99 goes 98, 98 to 97, etc. excepting index 0
  xArray[0] = x;//finally add the newest value 
  yArray[0] = y;//at the start of the array (so in the next loop it gets shifted over by 1) like the above values
}

これにより、完全なリストが作成されます。

import processing.core.PApplet;

public class Assignment09b extends PApplet {
  // Create arrays to stort the x & y values of the mouse
  int [] xArray = new int [100];
  int [] yArray = new int [100];

  public void setup(){
      //Runs at 60Fps

      size(500, 500);
  }

  public void draw(){
      //Changes the background each frame
      background(0);

      updateArrays(mouseX,mouseY);

      //SHOULD print out the snake using series of ellipses
      for (int i = 0; i < xArray.length; i++){

          //Generates a random color each time
          fill(random(255), random(255), random(255));
          ellipse(xArray[i], yArray[i], 25, 25);
      }

  }

  private void updateArrays(int x,int y){
    arrayCopy(xArray, 0, xArray, 1, xArray.length-1);//shift all elements backwards by 1
    arrayCopy(yArray, 0, yArray, 1, yArray.length-1);//so x at index 99 goes 98, 98 to 97, etc. excepting index 0
    xArray[0] = x;//finally add the newest value 
    yArray[0] = y;//at the start of the array (so in the next loop it gets shifted over by 1) like the above values
  }
}

これは演習なので、for ループと配列をもっといじることをお勧めします。これは、かなり頻繁に使用することになるものであり、練習/コツをつかむ価値があります。幸運を!

var xArray = new Array(100);
var yArray = new Array(100);

function setup(){
  createCanvas(500, 500);
}

function draw(){
    //Changes the background each frame
    background(0);

    updateArrays(mouseX,mouseY);

    //SHOULD print out the snake using series of ellipses
    for (var i = 0; i < xArray.length; i++){

        //Generates a random color each time
        fill(random(255), random(255), random(255));
        ellipse(xArray[i], yArray[i], 25, 25);
    }

}

function updateArrays(x,y){
  arrayCopy(xArray, 0, xArray, 1, xArray.length-1);//shift all elements backwards by 1
  arrayCopy(yArray, 0, yArray, 1, yArray.length-1);//so x at index 99 goes 98, 98 to 97, etc. excepting index 0
  xArray[0] = x;//finally add the newest value 
  yArray[0] = y;//at the start of the array (so in the next loop it gets shifted over by 1) like the above values
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.4.4/p5.min.js"></script>

于 2013-04-12T23:24:43.927 に答える