1

PGraphics に小さな問題があります。私が取り組んでいるより大きなプロジェクトから抽出された次のコードがあります。

int x=0;
int y=0;

PGraphics array1;
PGraphics array2;

void setup() {
  size(200,200);
  background(0);
  array1 = createGraphics(200,200);
  array2 = createGraphics(200,200);
  frameRate(10);
}

void draw() {
  array1.beginDraw();
  array1.background(0);
  array1.noStroke();
  array1.fill(150);
  array1.ellipse(x,y,20,20);
  array1.endDraw();

  array1.loadPixels();
  array2.loadPixels();

  //presence of two below lines doesn't change anything
  array1.updatePixels();
  array2.updatePixels();

  //not by arrayCopy since I want to add filters in next project
  for(int i=0; i<200*200; i++) {
    array2.pixels[i] = array1.pixels[i];
  }

  //presence of two below lines doesn't change anything
  array1.updatePixels();
  array2.updatePixels();

  //I want to see only the array2 - now it should be the same as array1
//  image(array1, 0,0);
  image(array2, 0,0);

  //presence of two below lines doesn't change anything
  array1.updatePixels();
  array2.updatePixels();

  x++;
  y++;

}

一般に、PGraphics array1 を PGraphics array2 にコピーします。ただし、array2 は最初のフレームの array1 のように見え、ビジュアルは更新されません。私が追加したとき:

println(array1.pixels[0]+" "+array2.pixels[0]);

それは印刷します:

...
-6908266 -6908266
-6908266 -6908266
-6908266 -6908266
-16777216 -16777216
-16777216 -16777216
...

したがって、明らかに両方の配列に同じ値が含まれています。更新された array2 が表示されない理由がわかりません。

ドキュメントに従って updatePixels メソッドを別の場所に配置してみましたが、これは役に立ちません。

私は何が欠けていますか?

前もって感謝します!

4

1 に答える 1

3

array2 PGraphic に対して beginDraw() と endDraw() を呼び出すのを忘れました。もしあなたがそうするなら:

array2.beginDraw(); // HERE!!
  for (int i= 0; i<array1.pixels.length; i++) {
    array2.pixels[i] = array1.pixels[i];
  }
  array2.updatePixels();
array2.endDraw(); // and HERE!! :)

期待どおりに動作するはずです。

于 2013-05-17T22:10:51.313 に答える