【问题标题】:Having trouble with updatePixels() in a Java app using Processing libraries在使用处理库的 Java 应用程序中遇到 updatePixels() 问题
【发布时间】:2011-09-06 20:19:10
【问题描述】:

我正在尝试用 Java 编写一个使用处理来呈现图形的简单游戏。但是,我无法使用 updatePixels() 渲染任何更改。我可以成功设置背景颜色并绘制基本的 2d 形状,但是我从编辑像素 [] 变量或使用 set(x, y, color) 中什么也得不到。

这是我的(删节的)代码:

import processing.core.*;

public class GameController extends PApplet {
  private int width, height;

  private final static String RENDER_MODE = PConstants.P2D; //JAVA2D;

  public GameController(int width, int height) {
    this.width = width;
    this.height = height - this.getBounds().y;
  }

  @Override
  public void setup() {
    this.size(this.width, this.height, RENDER_MODE);
    this.background(0);
  }

  @Override
  public void draw() {
    this.ellipse(50, 50, 100, 10);

    this.loadPixels();
    for (int p : this.pixels) {
      p = this.color(255, 0, 0);
    }
    this.updatePixels();
  }
}

当我初始化()这个类时,我在黑屏上得到一个白色椭圆,而不是一个红色像素屏幕(这是我所期待的)。 像素 [] 数组肯定在那里,因为我已经打印出来了,而且我没有收到任何错误。 我做错了什么?

【问题讨论】:

    标签: java processing


    【解决方案1】:

    这一行:

    p = this.color(255, 0, 0);
    

    仅更改局部变量p,其中包含像素值的副本。

    你想要修改pixels数组中的值,如:

    for (int i = 0 ; i < pixels.length ; i++) {
        pixels[i] = color(255, 0, 0);
    }
    

    【讨论】:

    • 其实你写的代码相当于Java的for-each函数。我认为问题比这更微妙。我也尝试通过索引修改单个像素无济于事。
    • @Fecal Brunch:不,这不等效,p 不是对像素的引用,它是一个整数。尝试给定的代码。
    • @PhiLho 感谢您的浏览。我确实试过这个,以防万一,但它没有用。我也尝试过诸如“pixels[5] = color(255, 0, 0)”之类的东西来改变个体。我相当肯定这与循环无关。关于为什么 for-each 是等价的,请注意“pixels[]”实际上是一个 int 数组,其像素存储为十六进制 RGB 值。 IE。 "PApplet.color(255, 0, 0)" 将返回 "0xFF000000" (最后两个零是 alpha 通道)。只是为了澄清每个等效性:leepoint.net/notes-java/flow/loops/foreach.html
    • 啊,我刚刚又试了一次,现在可以了。惊人的。但是为什么不为每个工作呢?
    • 嗯,好吧,这是对的,但是当我改变它时,什么也没发生。我遇到的问题实际上是代码中的其他地方。傻我。谢谢大家。
    猜你喜欢
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    • 2021-11-14
    相关资源
    最近更新 更多