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();

结果

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

Processing多窗口程序范例(一)的更多相关文章

  1. Cocos2dx集成于windows桌面窗口程序的步骤

    2D游戏需要做编辑器,而编辑器总是希望可以复用游戏中的逻辑来运行场景试看效果. 对于cocos2dx开发的程序,这个需求可以描述为: 实现一种方法,在桌面窗口程序中的某个控件上显示cocos2dx的场 ...

  2. QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数

    QT源码解析(一) QT创建窗口程序.消息循环和WinMain函数 分类: QT2009-10-28 13:33 17695人阅读 评论(13) 收藏 举报 qtapplicationwindowse ...

  3. VC菜菜鸟:建立第一个基于Visual C++的Windows窗口程序

    建立第一个基于VisualC++的Windows窗口程序: 发表于:http://blog.csdn.net/it1988888/article/details/10306585 a)执行命令:新建 ...

  4. cygwin 运行窗口程序

    首先, 默认安装的cygwin是不能运行窗口程序的 比如,一段python窗口程序: import * from tkinter Tk() mainloop() 如果使用命令行: python3 py ...

  5. 32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数

    32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数 (如果想看所有代码,请下载课堂资料,里面有所有代码,这里会讲解怎么生成一个窗口程序) 一丶32位汇编编写Windows窗口程序 首 ...

  6. Windows程序设计笔记(二) 关于编写简单窗口程序中的几点疑惑

    在编写窗口程序时主要是5个步骤,创建窗口类.注册窗口类.创建窗口.显示窗口.消息环的编写.对于这5个步骤为何要这样写,当初我不是太理解,学习到现在有些问题我基本上已经找到了答案,同时对于Windows ...

  7. win32程序之窗口程序,以及消息机制

    win32程序值窗口程序,以及消息机制 一丶简介 通过上一讲.我们了解了窗口其实是绘制出来的.而且是不断绘制的过程. 所以窗口的本质是绘制. 但是我们现在看到的窗口程序.都可以点击关闭按钮. 使用鼠标 ...

  8. 第一个手写Win32窗口程序

    第一个手写Win32窗口程序 一 Windows编程基础 1 Win32应用程序的基本类型 1.1 控制台程序 不需要完善的Windows窗口,可以使用DOS窗口 的方式显示. 1.2 Win32窗口 ...

  9. 一个执行Dos命令的窗口程序,与各位分享。

    一个执行Dos命令的窗口程序,与各位分享.   效果图:     具体实现在代码中有详细的注释,请看代码.   实现执行CMD命令的核心代码(Cmd.cs):   [csharp]   using S ...

  10. Windoows窗口程序五

    程序执行机制 过程驱动-程序的执行过程是按照预订好的顺序执行. 事件驱动-程序的执行是无序,用户可以根据需要随机触发相应的事件. Win32窗口程序就是采用事件驱动方式执行,也就是消息机制. 当系统通 ...

随机推荐

  1. MeteoInfo-Java解析与绘图教程(九)_JAVA解析天气雷达基数据

    MeteoInfo在这两年中也更新了很多,其中对新一代标准格式多普勒天气雷达基数据的解析以及绘制是对Java开发者最好的拓展,其中Java可以做到基本要素绘图,例如基本反射率,基本速度等,还有二次产品 ...

  2. 技术实践|Redis基础知识及集群搭建(上)

    ​ Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.本篇文章围绕Redis基础知识及集群搭建相关内容进行了分享 ...

  3. 【C#】【ffmpeg】外部调用线程执行ffmepg读取返回的信息乱码问题

    起因 C#使用FFmpeg获取电脑音视频可以用设备,当返回内容包含中文时,出现乱码问题 解决方案 ffmpeg本身的输出都是使用的错误输出,所以设置的是StandardErrorEncoding,如果 ...

  4. 黑苹果(Hackintosh) - 问题,虚拟机中的黑苹果系统分辨率低,界面小

    问题截图 解决办法 先把 draw.iso 放进 VMware 的安装根目录 再设置 Mac OS 虚拟机系统的配置情况 如果实在不行 就使用 VM 的拉伸显示功能吧,就将就着用用

  5. 使用百度地图API服务中的问题汇总

    1.服务器端与浏览器端的AK的区别 服务端就是指数据操作需要在百度地图服务器上进行接口数据交互,不能在前端代码中直接调用,跨域不支持,开发多一个后端: 浏览器端就是指数据操作需要在Web前端就可以完成 ...

  6. 基于开源IM即时通讯框架MobileIMSDK:RainbowChat v8.4版已发布

    关于MobileIMSDK MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架,超轻量级.高度提炼,一套API优雅支持UDP .TCP .WebSocket 三种协议,支持iOS.A ...

  7. vue基础2

    1.表单 表单里面有单选框,多选框,下拉框,文本域 vue单页应用 SPA:signal page application(单页应用) 多页面:1个url->1个html文件 多个url-> ...

  8. Solution -「NOI 2017」「洛谷 P3825」游戏

    \(\mathscr{Description}\)   Link.   给大家看个乐子: link, 懒得概括题意啦. \(\mathscr{Solution}\)   对于没有 X 的情况, 显然可 ...

  9. OpenCL入门笔记

    1.概述 1.1.OpenCL标准 OpenCL(Open Computing Language)是一个开放标准的并行编程框架,它允许开发者在异构系统上利用各种计算设备(例如CPU.GPU.FPGA等 ...

  10. jQuery---操作指南

    功能代码(1)---通过Jquery来处理复选框 实现以下功能: 1:选中第一个复选框,那么下面所有的复选框都选中,去除选中第一个复选框,下面的都不选中 2:当点击全选按钮,上面足球.篮球.游泳.唱歌 ...