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窗口程序就是采用事件驱动方式执行,也就是消息机制. 当系统通 ...
随机推荐
- 对象存储COS成本优化方案
随着上云企业越来越多,企业对用云成本问题也越发重视.业务的发展会产生海量存储需求,在云端存储数据时,如何进行成本优化,减轻业务负担呢? 在进行成本优化之前,首先需要了解腾讯云对象存储COS的成本构成. ...
- 【数据库】MySQL的一些基础知识
ALTER TABLE 表名 DROP 属性名 删除数据表 DROP TABLE 数据库名.表名; 用户管理 创建用户 CREATE USER 'username'@'host' IDENTIFIED ...
- 编译Ubuntu 24.04 LTS 内核(BuildYourOwnKernel)
1.配置环境 修改apt源 修改 /etc/apt/sources.list.d/ubuntu.sources ,添加 "deb-src"到 Types:,修改后的文件内容如下: ...
- Solution Set -「DS 专题」兔年的兔子写 DS 会有小常数吗?
目录 Day 1 「Ynoi 2009」「洛谷 P6109」rprmq1 ^ 「Ynoi Easy Round 2021」「洛谷 P8512」TEST_152 「Ynoi 2005」「洛谷 P7907 ...
- SpringBoot集成Jwt(详细步骤+图解)
SpringBoot集成Jwt(详细步骤+图解)Jwt简介 JSON Web Token是目前最流行的跨域认证解决方案,,适合前后端分离项目通过Restful API进行数据交互时进行身份认证 Jwt ...
- C#添加log4日志
第一步导入log4net 在vs的程序包管理器控制台中执行命令 NuGet\Install-Package log4net -Version 2.0.0 第二步加帮助类HttpHelper using ...
- linux:用户管理
用户账号添加.删除.修改以及用户密码的管理 用户组的管理 涉及三个文件: /etc/passwd :存储用户的关键信息 /etc/group :存储用户组的关键信息 /etc/shadow :存 ...
- linxu7下安装pacemaker+corosync集群-01
1.yum仓库的配置-自行配置 2.安装软件包: yum -y install pacemaker* corosync* pcs* psmisc yum -y install pcs fence-ag ...
- 从理房间到移动零:一道考察数组操作的经典题目|LeetCode 283 移动零
LeetCode 283 移动零 点此看全部题解 LeetCode必刷100题:一份来自面试官的算法地图(题解持续更新中) 生活中的算法 你有没有整理过房间?常常会发现一些要丢掉的东西,但又不想立刻处 ...
- 《中国电信天翼云PON SD-WAN技术白皮书》来了,这份技术指南不要错过!
5月17日,在中国电信第三届科技节·上海站暨517世界电信日活动上,天翼云联合中国电信上海公司正式发布<中国电信天翼云PON SD-WAN技术白皮书>,为中国电信深入实施"云转数 ...