绘制正方形时按键问题

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(使用前将#替换为@)

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

  • 使用 Intellij Idea 和 gradle 在应用程序引擎上调试 localhost

    我正在使用 IntelliJ 社区添加并使用 Gradle 构建应用程序引擎标准环境应用程序 在迁移到 IntelliJ 和端点框架之前 我使用的是 Android Studio 我无法调试我的本地主机 我添加了 jvmFlags 如下所述
  • 使用 Java 的 Apache Http 摘要身份验证

    我目前正在开发一个 Java 项目 但无法使 http 摘要身份验证正常工作 我尝试使用 Apache 网站 但没有帮助 我有一个需要 HTTP 摘要身份验证的网站 DefaultHttpClient httpclient new Defa
  • 与 Eclipse 中的 Java Content Assist 交互

    作为我的插件项目的一部分 我正在考虑与 Eclipse 在 Java 文件上显示的内容辅助列表进行交互 我正在尝试根据一些外部数据对列表进行重新排序 我看过一些有关创建新内容辅助的教程 但没有看到有关更改现有内容辅助的教程 这可能吗 如果是
  • 如何在 JPQL 或 HQL 中进行限制查询?

    在 Hibernate 3 中 有没有办法在 HQL 中执行相当于以下 MySQL 限制的操作 select from a table order by a table column desc limit 0 20 如果可能的话 我不想使用
  • Android中如何使用JNI获取设备ID?

    我想从 c 获取 IMEIJNI 我使用下面的代码 但是遇到了未能获取的错误cls 它总是返回NULL 我检查了环境和上下文 它们都没有问题 为什么我不能得到Context班级 我在网上搜索了一下 有人说我们应该使用java lang Ob
  • 将巨大的模式编译成Java

    有两个主要工具提供了将 XSD 模式编译为 Java 的方法 xmlbeans 和 JAXB 问题是 XSD 模式确实很大 30MB 的 XML 文件 大部分模式在我的项目中没有使用 所以我可以注释掉大部分代码 但这不是一个好的解决方案 目
  • Mockito 使用 @Mock 时将 Null 值注入到 Spring bean 中?

    由于我是 Spring Test MVC 的新手 我不明白这个问题 我从以下代码中获取了http markchensblog blogspot in search label Spring http markchensblog blogsp
  • 如何在单个查询中搜索 RealmObject 的 RealmList 字段

    假设我有一堂课 public class Company extends RealmObject private String companyId private RealmList
  • 在 Java 中如何找出哪个对象打开了文件?

    我需要找出答案哪个对象在我的 Java 应用程序中打开了一个文件 这是为了调试 因此欢迎使用工具或实用程序 如果发现哪个对象太具体了 这class也会很有帮助 这可能很棘手 您可以从使用分析器开始 例如VisualVM http visua
  • Java 中如何将 char 转换为 int? [复制]

    这个问题在这里已经有答案了 我是Java编程新手 我有例如 char x 9 我需要得到撇号中的数字 即数字 9 本身 我尝试执行以下操作 char x 9 int y int x 但没有成功 那么我应该怎么做才能得到撇号中的数字呢 ASC
  • 如何在 Spring 中使 @PropertyResource 优先于任何其他 application.properties ?

    我正在尝试在类路径之外添加外部配置属性资源 它应该覆盖任何现有的属性 但以下方法不起作用 SpringBootApplication PropertySource d app properties public class MyClass
  • 如何在字段值无效的情况下更改 Struts2 验证错误消息?

    我在 Web 表单上使用 Struts2 验证 如果字段假设为整数或日期 则
  • 在Java中运行bat文件并等待

    您可能会认为从 Java 启动 bat 文件是一项简单的任务 但事实并非如此 我有一个 bat 文件 它对从文本文件读取的值循环执行一些 sql 命令 它或多或少是这样的 FOR F x in CD listOfThings txt do
  • Java继承,扩展类如何影响实际类

    我正在查看 Sun 认证学习指南 其中有一段描述了最终修饰符 它说 如果程序员可以自由地扩展我们所知的 String 类文明 它可能会崩溃 他什么意思 如果可以扩展 String 类 我是否不会有一个名为 MyString 的类继承所有 S
  • 如何将 HTML 链接放入电子邮件正文中?

    我有一个可以发送邮件的应用程序 用 Java 实现 我想在邮件中放置一个 HTML 链接 但该链接显示为普通字母 而不是 HTML 链接 我怎样才能将 HTML 链接放入字符串中 我需要特殊字符吗 太感谢了 Update 大家好你们好 感谢
  • 使用 Elastic Beanstalk 进行 Logback

    我在使用 Elastic Beanstalk 记录应用程序日志时遇到问题 我正在 AWS Elastic Beanstalk 上的 Tomcat 8 5 with Corretto 11 running on 64bit Amazon Li
  • 为什么\0在java中不同系统中打印不同的输出

    下面的代码在不同的系统中打印不同的输出 String s hello vsrd replace 0 System out println s 当我在我的系统中尝试时 Linux Ubuntu Netbeans 7 1 它打印 When I
  • 在 Spring 上下文中查找方法级自定义注释

    我想知道的是 所有的类 方法Spring http en wikipedia org wiki Spring Framework注释为 Versioned的bean 我创建了自定义注释 Target ElementType METHOD E
  • Java 正则表达式中的逻辑 AND

    是否可以在 Java Regex 中实现逻辑 AND 如果答案是肯定的 那么如何实现呢 正则表达式中的逻辑 AND 由一系列堆叠的先行断言组成 例如 foo bar glarch 将匹配包含所有三个 foo bar 和 glarch 的任何
  • Spring RESTful控制器方法改进建议

    我是 Spring REST 和 Hibernate 的新手 也就是说 我尝试组合一个企业级控制器方法 我计划将其用作未来开发的模式 您认为可以通过哪些方法来改进 我确信有很多 RequestMapping value user metho

随机推荐

  • 无法为 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