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

笔者觉得这是具有典型的多窗口例子,初学者值得好好研习的,更多的范例会在之后发布,感谢阅读!
Processing多窗口程序范例(一)的更多相关文章
- Cocos2dx集成于windows桌面窗口程序的步骤
2D游戏需要做编辑器,而编辑器总是希望可以复用游戏中的逻辑来运行场景试看效果. 对于cocos2dx开发的程序,这个需求可以描述为: 实现一种方法,在桌面窗口程序中的某个控件上显示cocos2dx的场 ...
- QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数
QT源码解析(一) QT创建窗口程序.消息循环和WinMain函数 分类: QT2009-10-28 13:33 17695人阅读 评论(13) 收藏 举报 qtapplicationwindowse ...
- VC菜菜鸟:建立第一个基于Visual C++的Windows窗口程序
建立第一个基于VisualC++的Windows窗口程序: 发表于:http://blog.csdn.net/it1988888/article/details/10306585 a)执行命令:新建 ...
- cygwin 运行窗口程序
首先, 默认安装的cygwin是不能运行窗口程序的 比如,一段python窗口程序: import * from tkinter Tk() mainloop() 如果使用命令行: python3 py ...
- 32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数
32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数 (如果想看所有代码,请下载课堂资料,里面有所有代码,这里会讲解怎么生成一个窗口程序) 一丶32位汇编编写Windows窗口程序 首 ...
- Windows程序设计笔记(二) 关于编写简单窗口程序中的几点疑惑
在编写窗口程序时主要是5个步骤,创建窗口类.注册窗口类.创建窗口.显示窗口.消息环的编写.对于这5个步骤为何要这样写,当初我不是太理解,学习到现在有些问题我基本上已经找到了答案,同时对于Windows ...
- win32程序之窗口程序,以及消息机制
win32程序值窗口程序,以及消息机制 一丶简介 通过上一讲.我们了解了窗口其实是绘制出来的.而且是不断绘制的过程. 所以窗口的本质是绘制. 但是我们现在看到的窗口程序.都可以点击关闭按钮. 使用鼠标 ...
- 第一个手写Win32窗口程序
第一个手写Win32窗口程序 一 Windows编程基础 1 Win32应用程序的基本类型 1.1 控制台程序 不需要完善的Windows窗口,可以使用DOS窗口 的方式显示. 1.2 Win32窗口 ...
- 一个执行Dos命令的窗口程序,与各位分享。
一个执行Dos命令的窗口程序,与各位分享. 效果图: 具体实现在代码中有详细的注释,请看代码. 实现执行CMD命令的核心代码(Cmd.cs): [csharp] using S ...
- Windoows窗口程序五
程序执行机制 过程驱动-程序的执行过程是按照预订好的顺序执行. 事件驱动-程序的执行是无序,用户可以根据需要随机触发相应的事件. Win32窗口程序就是采用事件驱动方式执行,也就是消息机制. 当系统通 ...
随机推荐
- MeteoInfo-Java解析与绘图教程(九)_JAVA解析天气雷达基数据
MeteoInfo在这两年中也更新了很多,其中对新一代标准格式多普勒天气雷达基数据的解析以及绘制是对Java开发者最好的拓展,其中Java可以做到基本要素绘图,例如基本反射率,基本速度等,还有二次产品 ...
- 技术实践|Redis基础知识及集群搭建(上)
Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.本篇文章围绕Redis基础知识及集群搭建相关内容进行了分享 ...
- 【C#】【ffmpeg】外部调用线程执行ffmepg读取返回的信息乱码问题
起因 C#使用FFmpeg获取电脑音视频可以用设备,当返回内容包含中文时,出现乱码问题 解决方案 ffmpeg本身的输出都是使用的错误输出,所以设置的是StandardErrorEncoding,如果 ...
- 黑苹果(Hackintosh) - 问题,虚拟机中的黑苹果系统分辨率低,界面小
问题截图 解决办法 先把 draw.iso 放进 VMware 的安装根目录 再设置 Mac OS 虚拟机系统的配置情况 如果实在不行 就使用 VM 的拉伸显示功能吧,就将就着用用
- 使用百度地图API服务中的问题汇总
1.服务器端与浏览器端的AK的区别 服务端就是指数据操作需要在百度地图服务器上进行接口数据交互,不能在前端代码中直接调用,跨域不支持,开发多一个后端: 浏览器端就是指数据操作需要在Web前端就可以完成 ...
- 基于开源IM即时通讯框架MobileIMSDK:RainbowChat v8.4版已发布
关于MobileIMSDK MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架,超轻量级.高度提炼,一套API优雅支持UDP .TCP .WebSocket 三种协议,支持iOS.A ...
- vue基础2
1.表单 表单里面有单选框,多选框,下拉框,文本域 vue单页应用 SPA:signal page application(单页应用) 多页面:1个url->1个html文件 多个url-> ...
- Solution -「NOI 2017」「洛谷 P3825」游戏
\(\mathscr{Description}\) Link. 给大家看个乐子: link, 懒得概括题意啦. \(\mathscr{Solution}\) 对于没有 X 的情况, 显然可 ...
- OpenCL入门笔记
1.概述 1.1.OpenCL标准 OpenCL(Open Computing Language)是一个开放标准的并行编程框架,它允许开发者在异构系统上利用各种计算设备(例如CPU.GPU.FPGA等 ...
- jQuery---操作指南
功能代码(1)---通过Jquery来处理复选框 实现以下功能: 1:选中第一个复选框,那么下面所有的复选框都选中,去除选中第一个复选框,下面的都不选中 2:当点击全选按钮,上面足球.篮球.游泳.唱歌 ...