绘制正方形时按键问题

2023-12-30

我试图在按下鼠标键时向画布添加一个正方形,并且我希望在释放鼠标键时它保留在画布上,但在释放鼠标键时它会消失。谁能帮助我,我做错了什么?

int squareSize = 6;
final float DIFF_SIZE = 1;
final int MIN_COLOUR = 1;
final int MAX_COLOUR = 10;
final float INIT_RED = 100, INIT_GREEN = 50, INIT_BLUE = 80;
final float FINAL_RED = 255, FINAL_GREEN = 200, FINAL_BLUE = 250;
final float MAX_SIZE = 40;
final float X_SPACING = 10;
final float Y_SPACING = 10;
float squareX, squareY;
void setup() {
    size(600, 600);
}

void draw() {
    squareX = mouseX - squareSize / 2;
    squareY = mouseY - squareSize / 2;
    background(255);

    drawRowsOfBlocks();

}

void drawOneBlock() {

    rect(squareX, squareY, squareSize, squareSize);
    for (int i = MIN_COLOUR; mousePressed && i <= MAX_COLOUR / 10; i++)

    {
        float redValue = INIT_RED + (i - MIN_COLOUR) / (MAX_COLOUR - MIN_COLOUR)(FINAL_RED - INIT_RED);
        float greenValue = INIT_GREEN + (i - MIN_COLOUR) / (MAX_COLOUR - MIN_COLOUR)(FINAL_GREEN - INIT_GREEN);
        float blueValue = INIT_BLUE + (i - MIN_COLOUR) / (MAX_COLOUR - MIN_COLOUR) * (FINAL_BLUE - INIT_BLUE);
        fill(redValue, greenValue, blueValue);
        rect(squareX, squareY, squareSize, squareSize);
        squareSize += DIFF_SIZE;
    }
    if (squareSize > MAX_SIZE) {
        squareSize = 6;
    }
}

void drawRowsOfBlocks() {
    drawOneBlock();

    for (int i = 1; keyPressed && i <= 2; i++) {
        drawOneBlock();

        float squareY2;
        squareY2 = squareY + squareSize + Y_SPACING;
        squareY = squareY2;
    }
}

创建一个可以处理矩形的类。调用需要一个方法来绘制矩形(Draw())以及更新矩形位置和大小的方法(Update()):

final int DIFF_SIZE = 1;
final int MIN_SIZE = 6;
final int MAX_SIZE = 40;

final float INIT_RED = 100, INIT_GREEN = 50, INIT_BLUE = 80;
final float FINAL_RED = 255, FINAL_GREEN = 200, FINAL_BLUE = 250;

class Rectangle {

    int pos_x, pos_y, size;
    color col;

    Rectangle(int px, int py, int s, color c) {
        col = c;
        pos_x = px; pos_y = py;
        size = s;
    }

    void Update(int px, int py, int inc_size) {
        pos_x = px; pos_y = py;

        size += inc_size;
        if (size > MAX_SIZE)
            size = MIN_SIZE;

        float w = float(size - MIN_SIZE) / float(MAX_SIZE - MIN_SIZE);
        float redValue   = INIT_RED   + w * (FINAL_RED - INIT_RED);
        float greenValue = INIT_GREEN + w * (FINAL_GREEN - INIT_GREEN);
        float blueValue  = INIT_BLUE  + w * (FINAL_BLUE - INIT_BLUE);
        col = color(int(redValue), int(greenValue), int(blueValue));
    }

    void Draw() {
        fill(col);
        rect(pos_x-size/2, pos_y-size/2, size, size);
    }
}

Use ArrayList https://processing.org/reference/ArrayList.html存储所有绘制的矩形:

ArrayList<Rectangle> rectangles = new ArrayList<Rectangle>();

添加一个全局布尔状态(drawingRect) 指示当前是否按下了鼠标按钮。设置状态并在列表末尾添加新矩形mousePressed() https://processing.org/reference/mousePressed_.html事件发生。休息状态时mouseReleased() https://processing.org/reference/mouseReleased_.html事件发生

boolean drawingRect = false;

void mousePressed() {
    drawingRect = true;

    color col = color(int(INIT_RED), int(INIT_GREEN), int(INIT_BLUE));
    rectangles.add(new Rectangle(mouseX, mouseY, MIN_SIZE, col));
}

void mouseReleased() {
    drawingRect = false;
}

使用方法.Update(),只要状态改变列表中最后一个矩形的位置和大小drawingRect表示鼠标按钮被按下。
连续循环绘制所有矩形:

void setup() {
    size(600, 600);
}

void draw() {

    if (drawingRect && rectangles.size() > 0) {
        Rectangle lastRect = rectangles.get(rectangles.size()-1);
        lastRect.Update(mouseX, mouseY, DIFF_SIZE);
    }

    background(255);

    for (int i = 0; i < rectangles.size(); i++) {
        Rectangle rect = rectangles.get(i);
        rect.Draw();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

绘制正方形时按键问题 的相关文章

  • OSGi:将参数传递给特定包

    我有一个带有自定义 Main 类的自定义 jar 它启动 OSGi 框架并安装 启动捆绑包 这个主 jar 还包括一个属性文件 目标 我有一个包 A 它应该以某种方式获取主 jar 的该属性文件的属性 我的第一次尝试是在捆绑包 A 中定义一
  • 安卓。 onEditorAction 从未被调用

    我正在尝试捕捉从屏幕上移除键盘的事件 并且我正在使用OnEditorActionListener班级 然而 其onEditorAction方法永远不会被调用 这是我的 XML 格式的 EditText
  • 定制法国号码格式

    我尝试为美国国家 地区使用自定义数字格式 到目前为止效果很好 Not something I want NumberFormat numberFormat0 NumberFormat getNumberInstance Locale US
  • 如何通过keytool命令删除已经导入的证书/别名?

    我正在尝试通过 keytool 命令删除已导入的证书 keytool delete noprompt alias initcert keystore keycloak jks 但低于异常 keytool 错误 java lang Excep
  • JSP重定向和传值

    我有一个 JSP 其中我重定向到另一个 jsp 例如 我在该jsp中没有任何其他数据 我想将值从该jsp index jsp 传递到重定向jsp login jsp 我将如何做到这一点 这里的 logonInput 是在struts con
  • Java 创建 Thread 实例时会发生什么

    我有一个关于 Java 线程和操作系统线程的问题 我读了Java 线程与 Pthreads https stackoverflow com questions 5269535 java threads vs pthreads and Jav
  • 在 Java 和 PHP 之间加密/解密字符串

    我使用 AES 加密来加密和解密服务器端的 php 和 Android 应用程序 作为客户端 之间的字符串 PHP 中的加密字符串为 HaxRKnMxT24kCJWUXaVvqDHahzurJQK sYA4lIHql U 在 Java 中是
  • 从 Java 调用 Python 代码时出现问题(不使用 jython)

    我发现这是从 java 运行 使用 exec 方法 python 脚本的方法之一 我在 python 文件中有一个简单的打印语句 但是 我的程序在运行时什么也没做 它既不打印Python文件中编写的语句 也不抛出异常 程序什么都不做就终止了
  • Java 中 LINQ 的等价物是什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Java 中 LINQ 的等价物是什么 没有什么比 LINQ for Java 更好的了 Edit 现在
  • 在Java中一个接一个地播放WAV文件

    我正在尝试玩几个WAV http en wikipedia org wiki WAV文件一个接一个 我尝试了这个方法 for String file audioFiles new AePlayWave file start 但这会同时播放它
  • JFreeChart MeterPlot

    我目前正在用java做Agent项目 在某些时候 我需要显示一个仪表 例如 电池电量 我的程序中有 5 个代理 每个代理都会创建自己的带有名称的仪表图 但不知何故他们没有更新数据集 或者他们正在更新数据集 只是它没有显示在仪表图上 任何想法
  • 如何将我的自定义相机应用程序设置为默认应用程序?

    如果我使用以下代码 Intent takePictureIntent new Intent MediaStore ACTION IMAGE CAPTURE startActivityForResult takePictureIntent 1
  • 使用 Java 进行 AES 加密并使用 Javascript 进行解密

    我正在制作一个需要基于 Java 的 AES 加密和基于 JavaScript 的解密的应用程序 我使用以下代码作为基本形式进行加密 public class AESencrp private static final String ALG
  • Android:如何以编程方式仅圆化位图的顶角?

    我目前正在使用这段代码 Override public Bitmap transform Bitmap source Bitmap result Bitmap createBitmap source getWidth source getH
  • 何时以及为何使用缓冲输入和输出流? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我读到这些是为了减少磁盘 网络调用开销而使用的 这在写操作的情况下似乎很好 但是进行缓冲读取有什么好处呢 如果您按字节读取文件 则每次都会进
  • 在调试模式下,哪些代码更改会自动反映在 Eclipse 中?

    我使用 eclipse 用于编写 调试 作为 IDE 在调试模式下 当我进行一些更改 例如初始化局部变量 时 它们会自动反映 但其他更改例如更改静态变量的值 有时我会收到一条消息 说我需要重新启动虚拟机 有时则不需要 现在的问题是哪些类型的
  • 仅在java中使用数组计算50的阶乘

    我是java的初学者 我有一个作业要编写一个完整的程序 使用数组计算 50 的阶乘 我无法使用像 biginteger 这样的任何方法 我只能使用数组 因为我的教授希望我们理解背后的逻辑 我猜 然而 他并没有真正教我们数组的细节 所以我在这
  • Spring Data JPA 和 Exists 查询

    我正在使用 Spring Data JPA 使用 Hibernate 作为我的 JPA 提供程序 并想要定义一个exists附加 HQL 查询的方法 public interface MyEntityRepository extends C
  • 当我必须在 Netty4 编码器中调用 ByteBuf.retain() 时?

    我正在编写一个以 NUL 终止 JSON 消息的编码器 以便在消息碎片的情况下可以对其进行解码 我找到了这个样本 gt click https github com netty netty blob master codec src mai
  • gwt - 在 RPC 调用中使用 List

    我有一个 RPC 服务 方法如下 public List

随机推荐

  • 无法为 log4j 设置 LevelRangeFilter

    我正在使用此属性文件在 Spring 中设置 log4j log4j appender EMAIL org apache log4j net SMTPAppender log4j appender EMAIL filter org apac
  • 每次页面加载时提取随机图像

    在每个页面加载时我都会更改图像 我发现这个插件做得很好 function randomImage defaults you can change these defaults to your own preferences path tem
  • SwiftUI 是否有类似 Cocoa 的 nextKeyView 的功能,以便我可以指定当我点击 Tab 时 TextView 获取光标的确切顺序?

    想象一下 我有 6 个文本字段排列在 3 列 2 行的网格中 我们将通过它们在此网格中的 X Y 位置来引用它们 从左上角 TextField 中的 1 1 开始 到右下角中的 3 2 开始 当我运行这个程序时 我将光标放在 TextFie
  • 如何在 Qt 中的第二个显示器上全屏显示窗口窗体?

    我在linux上使用Qt5 我想在第二个屏幕 双显示器 上全屏显示窗口形式 我尝试了这段代码 但它不起作用 还有其他办法吗 QRect screenres QApplication desktop gt screenGeometry 1 s
  • 更改表视图单元格中重新排序控件的颜色

    在下图中 如何将视图右侧按钮的颜色更改为白色 编辑 理想情况下只希望某些单元格为白色 其他单元格为黑色这是我的代码 cell backgroundColor appOrange cell contentLabel textColor whi
  • 这个 iOS 控件叫什么?

    我无法找到或记住 iOS 应用程序底部弹出的此选项控件的名称 让我知道 这就是所谓的UIActionSheet UIActionSheet 类参考 https developer apple com library ios document
  • Ruby 发送 JSON 请求

    如何在 ruby 中发送 JSON 请求 我有一个 JSON 对象 但我认为我不能这样做 send 我必须让 javascript 发送表单吗 或者我可以在 ruby 中使用 net http 类吗 使用 header content ty
  • 如何在 AWS Lambda 上安装 GraphicsMagick 或 ImageMagick?

    我正在使用gmNode js 包以及 AWS Lambda 上提供的默认 ImageMagick 安装 const gm require gm subClass imageMagick true 由于某些原因 某些图像的调整大小功能失败 我
  • Spark ML CountVectorizer 输出的说明

    请帮助理解 Spark ML 的输出计数向量化器 https spark apache org docs latest api scala index html org apache spark ml feature CountVector
  • SQL 先进先出忠诚点

    各位开发人员和分析师 我在 SQL 方面有一些经验 并且已经求助于类似的帖子 然而 这有点小众 预先感谢您的帮助 我有以下数据集 已编辑 道歉 Setup CREATE TABLE CustomerPoints CustomerID INT
  • Cassandra 每个分区的单元格数上限为 20 亿,但分区是什么?

    在 Cassandra Wiki 中 据说有一个限制2 billion cells rows x columns 每个分区 但我不清楚什么是分区 每个列族的每个节点是否有一个分区 这意味着列族的最大大小为2 billion cells nu
  • 为什么 Array.apply(null, [args]) 在处理稀疏数组时表现不一致?

    我最近发现了以下内容SO 上的代码片段 https stackoverflow com a 13735425 1139652帮助使用默认值快速填充数组 Array apply null new Array 3 map function re
  • 黑莓 wifi http 连接

    我正在构建一个黑莓应用程序 它接受用户的输入 然后将输入发送到服务器并显示从服务器返回的 xml 问题是 虽然应用程序在模拟器上运行良好 但在真实设备上并不总是显示结果 有时它有效 但通常无效 我正在设备上使用 wifi 连接 代码是 Co
  • Scala:用其内部类型之一参数化类型

    我想用其子类之一参数化类型 考虑以下 class DataLoader class Data data specifics to this data loader def getData Data and so on 现在我想让这个加载器能
  • 我可以通过 CD 部署 ClickOnce 应用程序并通过 Web 更新吗?

    我们有一个通过 ClickOnce 扩展和部署的供应商应用程序 供应商还提供了一个 部署管理器 它将应用程序和任何扩展打包到我们发布到 Web 服务器的 ClickOnce 部署中 我提到这个细节是为了让大家理解我们实际上对更改部署过程没有
  • Express 和 Node.js 中的 app.set('views', __dirname + '/views')

    我对 app set 方法感到困惑 据我所知 app set 是这样的 app get title gt undefined app set title My Site app get title gt My Site 但在教程中 创建 v
  • 网页:多个可变高度的滚动区域

    我想创建一个具有固定高度的页眉 可变高度的中间部分和固定高度的页脚的 html 页面 滚动时页脚和页眉不应移动 到目前为止没有问题 但我希望将中间部分分开 以便右栏和左栏有单独的滚动条并独立滚动 只要零件具有固定的高度 就可以使用溢出 滚动
  • 提交后重置 HTML 表单

    const scriptURL URL const form document forms myform form addEventListener submit e gt e preventDefault fetch scriptURL
  • 为什么我的脚本未通过 w3c 验证?

    我有这段代码 并且 当我尝试验证它时 出现以下错误 文档类型不允许元素 这里是 img rer border 0 alt 无 alt gt 上述元素被发现于 不允许的上下文 这 可能意味着你错误地 嵌套元素 例如 样式
  • 绘制正方形时按键问题

    我试图在按下鼠标键时向画布添加一个正方形 并且我希望在释放鼠标键时它保留在画布上 但在释放鼠标键时它会消失 谁能帮助我 我做错了什么 int squareSize 6 final float DIFF SIZE 1 final int MI