Processing多窗口程序范例(二)
多窗口范例(二),做一个划线生成图像的应用,最后结果:
子窗口划线,主窗口复制多个画布叠加并添加了旋转动画。
范例程序
主程序:
package syf.demo.multiwindow2;
import processing.core.PApplet;
import processing.core.PGraphics;
public class TwoWindowApp extends PApplet {
ChildWindow childwindow;
Canvas canvas;
PGraphics pg;
@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(this,pg);
background(0);
}
@Override
public void draw() {
//background(20); 这里就暂时不刷新
canvas.update();
canvas.draw();
}
public static void main(String[] args) {
String[] appletArgs = new String[] {"syf.demo.multiwindow2.TwoWindowApp"};
PApplet.main(appletArgs);
}
}
子窗口类:
package syf.demo.multiwindow2;
import javafx.stage.Screen;
import processing.core.PApplet;
import processing.core.PConstants;
import processing.core.PGraphics;
import java.awt.*;
public class ChildWindow extends PApplet{
PGraphics pg;
PApplet app;
int preposx;
int preposy;
Dimension screen;
ChildWindow(PApplet _app,PGraphics _pg){
super();
pg = _pg;
app = _app;
PApplet.runSketch(new String[]{this.getClass().getName()},this);
Toolkit toolkit = Toolkit.getDefaultToolkit();
screen = toolkit.getScreenSize();
}
@Override
public void settings() {
size(pg.width, pg.height);
}
@Override
public void setup() {
background(0);
//让其窗口依附在主窗口左边
surface.setLocation(screen.width/2-app.width/2-this.width,screen.height/2-app.height/2);
pg.colorMode(PConstants.HSB,360,100,100);
pg.strokeWeight(8);
}
@Override
public void draw() {
pg.beginDraw();
pg.background(0,10); //背景刷新,加点透明度
//pg.stroke(250);
pg.stroke((frameCount*2)%360,100,100,150);//变颜色,颜色模式 HSB
pg.line(mouseX,mouseY,preposx,preposy);
pg.endDraw();
set(0,0,pg);
preposx = mouseX;
preposy = mouseY;
}
}
画布类:
package syf.demo.multiwindow2;
import processing.core.PApplet;
import processing.core.PGraphics;
public class Canvas {
private PApplet app;
PGraphics pg;
float rotvalue;
Canvas(PApplet _app, PGraphics _pg){
app = _app;
pg = _pg;
}
void update(){
rotvalue += 0.06; //让它自转
}
void draw(){
for (int i = 0; i < 10; i++) {
app.push();
app.translate(app.width/2,app.height/2);
app.rotate(360/10*i+rotvalue); //中心旋转扩散呈现
//app.set(0,0, pg); set 位置不受translate影响
app.image(pg, 0, 0);
app.pop();
}
}
}
总结
可以看到有了子窗口能清楚的看到用户的绘制过程和结果,在日后开发和维护都能有作用,说白了,是应用更自然更有范儿了~~~
Processing多窗口程序范例(二)的更多相关文章
- Python面向对象编程 - 一个记事本程序范例(二)
给程序加上控制台菜单 menu.py import sys from notebook import Notebook, Note class Menu: '''Display a menu and ...
- Windows程序设计笔记(二) 关于编写简单窗口程序中的几点疑惑
在编写窗口程序时主要是5个步骤,创建窗口类.注册窗口类.创建窗口.显示窗口.消息环的编写.对于这5个步骤为何要这样写,当初我不是太理解,学习到现在有些问题我基本上已经找到了答案,同时对于Windows ...
- QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数
QT源码解析(一) QT创建窗口程序.消息循环和WinMain函数 分类: QT2009-10-28 13:33 17695人阅读 评论(13) 收藏 举报 qtapplicationwindowse ...
- 32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数
32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数 (如果想看所有代码,请下载课堂资料,里面有所有代码,这里会讲解怎么生成一个窗口程序) 一丶32位汇编编写Windows窗口程序 首 ...
- win32程序之窗口程序,以及消息机制
win32程序值窗口程序,以及消息机制 一丶简介 通过上一讲.我们了解了窗口其实是绘制出来的.而且是不断绘制的过程. 所以窗口的本质是绘制. 但是我们现在看到的窗口程序.都可以点击关闭按钮. 使用鼠标 ...
- 第一个手写Win32窗口程序
第一个手写Win32窗口程序 一 Windows编程基础 1 Win32应用程序的基本类型 1.1 控制台程序 不需要完善的Windows窗口,可以使用DOS窗口 的方式显示. 1.2 Win32窗口 ...
- 使用Qt生成第一个窗口程序
一.打开QtCreater,点击New Project 二.在Qt中,最常用的窗口程序为widgets控件程序,这里我们选择Qt Widgets Application 三.Qt生成的debug和re ...
- 微信小程序配置二
tabBar 客户端窗口底部的tab页面切换,只能配置最好两个.最多5个tab 属性说明: 属性 类型 必填 默认值 描述 color HexColor 是 tab上的文字默认颜色 selectedC ...
- 第15.35节 PyQt编程实战:结合QDial实现的QStackedWidget堆叠窗口程序例子
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.案例说明 本案例是老猿在学习QStackedWidget中的一个测试案例,该案例使用QStack ...
- C++小项目:directx11图形程序(二):systemclass
先上代码: systemclass.h #pragma once #include"graphicsclass.h" const bool FULLSCREEN = true; c ...
随机推荐
- aws命令行cli创建VPC网络、公有子网、私有子网、nat网关+EIP
在AWS部署海外节点, 图简单使用web控制台创建VPC和k8s集群出错(k8s), 使用cli命令行工具创建成功 本实例为复盘, 记录aws命令行工具cli创建VPC网络, a区和b区分别创建公有子 ...
- Qt/C++地图轨迹回放/自定义图标/动态平滑移动/导入轨迹数据/支持各种地图包括天地图
一.前言说明 这个轨迹回放的功能迭代过很多个版本,最初的版本是轨迹点的坐标每次都是删除折线再重新生成折线,后面发现有内存泄漏,地图js中并不会及时的释放没有用的对象,哪怕是用地图提供的clearove ...
- Qt开源作品44-超级曲线图表
按照国际惯例,先吹吹牛,QCustomPlot这个开源图表组件,作者绝对是全宇宙Qt领域的天花板,设计的极其巧妙和精美,各种情况都考虑到了,将每个功能细分到不同的类,每个类负责管理自己的绘制和各种属性 ...
- [转]ptp(precision time protocol)时钟同步
一.介绍1:什么是ptpPTP(Precision Time Protocol) 是一个通过网络同步时钟的一个协议.当硬件支持时,PTP 精度能达到亚微秒,比 NTP(Network Time Pro ...
- com.mysql.cj.jdbc.Driver和com.mysql.jdbc.Driver的区别
今天写东西测试的时候发现一个问题,如下: application.yml中数据源是这样配置的: 第一反应就是记忆中连接mysql的驱动不都是com.mysql.jdbc.Driver吗?com.mys ...
- 阿里云-物联网IOT
https://iot.aliyun.com/?spm=5176.23056729.J_3207526240.265.3dcc3f06JR1HG2
- 面试题:关于StringBuffer()源码的深度理解Debug分析
import org.junit.Test; /** * @author CH * @create 2021 上午 11:23 */ public class IDEADebug { @Test pu ...
- uni-app封装网络请求
在项目下创建一个文件夹https 然后在文件夹下面创建两个文件api.js request.js api.js 用于存放项目的请求接口 request.js 用于存放封装的请求接口get post 在 ...
- AI+算力,赋予天翼云数字人“最强大脑”!
3月31日至4月1日,以"音视频+无限可能"为主题的LiveVideoStackCon 2022音视频技术大会(北京站)圆满举办.天翼云科技有限公司AI产品研发总监陈金出席&quo ...
- 服务器安装jdk,tomcat,mysql等全系列
安装jdk 执行如下命令, 然后等待安装完成 yum install -y java-1.8.0-openjdk-devel.x86_64 安装完毕后执行如下命令查看版本 java -version安 ...