zoukankan      html  css  js  c++  java
  • Processing多窗口程序范例(一)

    Processing学习到一定程度必定会关注源码,关注扩展功能,其中窗口创建是值得关注的技术点(实现多窗口)。下面就以一个简单范例来展开讨论。


    范例代码

    主程序先上:

    package syf.demo.multiwindow;
    
    import processing.core.PApplet;
    import processing.core.PGraphics;
    
    public class TwoWindowApp extends PApplet {
    
        ChildWindow childwindow;
        Canvas canvas;
        PGraphics pg;	//最为重要的成员变量---这个graphics 是子窗口画画的对象,然后平铺展现在主窗口中
    
        @Override
        public void settings() {
            size(800,800);
        }
    
        @Override
        public void setup() {
    
            pg = createGraphics(200,200);
            pg.beginDraw();
            pg.clear();
            pg.background(0,0);
            pg.endDraw();
            canvas = new Canvas(this,pg);
            childwindow = new ChildWindow(pg);
        }
    
        @Override
        public void draw() {
            background(20);
    
            canvas.update();
            canvas.draw();
        }
    
    
        public static void main(String[] args) {
            String[] appletArgs = new String[] {"syf.demo.multiwindow.TwoWindowApp"};
            PApplet.main(appletArgs);
        }
    }
    

    PGraphics pg是最为重要的成员变量,这个graphics子窗口画画的对象,然后平铺展现在主窗口中。其他都很简单,没有注解了,有问题欢迎留言。


    然后是子窗口类:

    package syf.demo.multiwindow;
    
    import processing.core.PApplet;
    import processing.core.PGraphics;
    
    public class ChildWindow extends PApplet{
        PGraphics pg;
        ChildWindow(PGraphics _pg){
            super();
            pg = _pg;
    
            PApplet.runSketch(new String[]{this.getClass().getName()},this);
        }
    
        @Override
        public void settings() {
            size(pg.width, pg.height);
        }
    
        @Override
        public void setup() {
            background(0);
        }
    
        @Override
        public void draw() {
            pg.beginDraw();
            pg.ellipse(mouseX,mouseY,50,50);
            pg.endDraw();
    
            set(0,0,pg);	//据说比 image()效率好高
        }
    }
    

    将那张graphics传进来初始化大小,目的是让该窗口作为这个graphics的监事窗口,一会儿在子窗口内画圆,即在graphics上作画。


    最后是主程序类中的画布类:

    package syf.demo.multiwindow;
    
    import processing.core.PApplet;
    import processing.core.PGraphics;
    
    import java.util.Set;
    
    public class Canvas {
    
        private PApplet app;
        PGraphics pg;
        Canvas(PApplet _app, PGraphics _pg){
            app = _app;
            pg = _pg;
        }
    
        void update(){
    
        }
    
        void draw(){
            for (int i = 0; i < 4; i++) {
                for (int j = 0; j < 4; j++) {
                    //app.image(pg,10,10);
                    app.set(i*app.width/4, j*app.height/4, pg);
    
                }
            }
        }
    }
    
    

    很简单,draw()中两层for平铺画面。注意要执行相关绘制函数,必须将最顶层的PApplet对象传入,比如代码中设的app即为TwoWindowApp的对象引用,那么要绘制调用set()image()应该这样写:

    app.set();
    app.image();
    

    结果

    image

    笔者觉得这是具有典型的多窗口例子,初学者值得好好研习的,更多的范例会在之后发布,感谢阅读!

  • 相关阅读:
    [HNOI2009]梦幻布丁(链表+启发式合并)
    [HNOI2004]宠物收养场(Treap)
    【模板】Treap
    Monkey King(左偏树)
    【模板】左偏树
    数列分段Section II(二分)
    [HAOI2006]受欢迎的牛(tarjan缩点)
    【模板】树链剖分
    精美产品策划类企业织梦模板
    简洁的支持展开关闭的tab标签代码
  • 原文地址:https://www.cnblogs.com/sharpeye/p/14655291.html
Copyright © 2011-2022 走看看