Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使所有后续图形调用应用于处理中的特定图形上下文的方法_Java_Drawing_Processing - Fatal编程技术网

Java 使所有后续图形调用应用于处理中的特定图形上下文的方法

Java 使所有后续图形调用应用于处理中的特定图形上下文的方法,java,drawing,processing,Java,Drawing,Processing,我的代码中有很多绘图调用(beginShape()、vertex()、line()、填充、笔划等)。此时,它们将应用于全局图形上下文。有没有一种方法可以切换图形上下文而不必遍历代码并更改所有图形调用 例如: line(0, 0, 0, 40); moreDrawingCode(); 变成: useContext(pg); // pg is a PGraphics object for instance line(0, 0, 0, 40); moreDrawingCode(); 您可以只创建静

我的代码中有很多绘图调用(
beginShape()
vertex()
line()
、填充、笔划等)。此时,它们将应用于全局图形上下文。有没有一种方法可以切换图形上下文而不必遍历代码并更改所有图形调用

例如:

line(0, 0, 0, 40);
moreDrawingCode();
变成:

useContext(pg); // pg is a PGraphics object for instance
line(0, 0, 0, 40);
moreDrawingCode();

您可以只创建静态上下文变量,您将得到如下结果:

class MyClass {
    private static Context context;

    public static void main(String[] args) {

        Context contextA = new Context();
        Context contextB = new Context();

        useContext(contextA);
        line(0, 0, 5, 5);

        useContext(contextB);
        line(0, 0, 5, 5);

    }

    public static void useContext(Context newContext) {
        context = newContext;
    }

    public static void line(int x, int y, int x2, int y2) {
        drawInContext(context, x, y, x2, y2);
    }
}

假设您有以下代码:

void draw() {
  drawStuff();
}

void drawStuff(){
   ellipse(50, 50, 25, 25);  
}
如果您想更改此代码以绘制不同的
PGraphics
,则必须修改代码以将
PGraphics
作为参数:

void drawStuff(PGraphics graphics){
   graphics.ellipse(50, 50, 25, 25);  
}
如果要绘制到屏幕,只需使用预定义的
g
变量:

drawStuff(g);
或者您可以传入您创建的图形。不要忘记调用
beginDraw()
endDraw()

综合起来,它可能看起来像这样:

PGraphics pg;

void setup() {
  size(200, 100);
  pg = createGraphics(100, 100);
}

void drawStuff(PGraphics graphics){
   graphics.ellipse(50, 50, 25, 25);  
}

void draw() {
  drawStuff(g);

  pg.beginDraw();
  drawStuff(pg);
  pg.endDraw();

  image(pg, 100, 0);
}

您也可以将要绘制的
PGraphics
存储在草图级别变量中,而不是将其作为参数传入,但这让我感觉更混乱。

请注意,这是一个问题。当处理与Java共享一些语法时,Java答案并不总是最适合处理问题。@KevinWorkman,作者为什么要用“Java”标记这个问题?请参阅,以获得关于该问题的讨论。@KevinWorkman,好的。很酷。但这是错误的,令人困惑的。处理听起来像是“处理某物…”。当你们用“Java”标签标记关于“处理”的问题时。。这是错误的。真让人困惑。我觉得这门语言的名字更好,比如说lang之类的,我没有给语言或标签命名。如果你认为它应该被重命名,请把它带到meta。
PGraphics pg;

void setup() {
  size(200, 100);
  pg = createGraphics(100, 100);
}

void drawStuff(PGraphics graphics){
   graphics.ellipse(50, 50, 25, 25);  
}

void draw() {
  drawStuff(g);

  pg.beginDraw();
  drawStuff(pg);
  pg.endDraw();

  image(pg, 100, 0);
}