Java 绘制正方形时按键出现问题
我试图在按下鼠标键时将一个正方形添加到画布上,我希望在释放鼠标键时它保持在画布上,但在释放鼠标键时它会消失。谁能帮帮我,我做错了什么Java 绘制正方形时按键出现问题,java,processing,Java,Processing,我试图在按下鼠标键时将一个正方形添加到画布上,我希望在释放鼠标键时它保持在画布上,但在释放鼠标键时它会消失。谁能帮帮我,我做错了什么 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
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;
}
}
int squareSize=6;
最终浮子差异大小=1;
最终整型最小颜色=1;
最终整型最大颜色=10;
最终浮点数初始红色=100,初始绿色=50,初始蓝色=80;
最终浮动最终红色=255,最终绿色=200,最终蓝色=250;
最终浮子最大尺寸=40;
最终浮点数X_间距=10;
最终浮动Y_间距=10;
浮动平方x,平方;
无效设置(){
大小(600600);
}
作废提款(){
squareX=鼠标x-平方大小/2;
squareY=鼠标-平方大小/2;
背景(255);
drawRowsOfBlocks();
}
void drawineblock(){
rect(squareX,squareY,squareSize,squareSize);
用于(int i=最小颜色;鼠标按下和最大大小){
平方大小=6;
}
}
void drawRowsOfBlocks(){
drawOneBlock();
对于(int i=1;keyPressed&&i创建一个可以处理矩形的类。调用需要一个方法来绘制矩形(draw()
)和一个方法来更新矩形的位置和大小(update()
):
final int DIFF_SIZE=1;
最终整数最小值=6;
最终整数最大值=40;
最终浮点数初始红色=100,初始绿色=50,初始蓝色=80;
最终浮动最终红色=255,最终绿色=200,最终蓝色=250;
类矩形{
int pos_x,pos_y,size;
颜色颜色;
矩形(整数像素、整数像素、整数s、颜色c){
col=c;
位置x=px;位置y=py;
尺寸=s;
}
无效更新(int px、int py、int inc_大小){
位置x=px;位置y=py;
尺寸+=包括尺寸;
如果(尺寸>最大尺寸)
尺寸=最小尺寸;
浮动w=浮动(大小-最小大小)/浮动(最大大小-最小大小);
浮点红色值=初始红色+w*(最终红色-初始红色);
浮点绿色值=初始绿色+w*(最终绿色-初始绿色);
浮点蓝值=初始蓝+w*(最终蓝-初始蓝);
col=颜色(int(红色值)、int(绿色值)、int(蓝色值));
}
作废提款(){
填充(col);
rect(位置x-size/2,位置y-size/2,尺寸,尺寸);
}
}
用于存储所有绘制的矩形:
ArrayList矩形=新建ArrayList();
添加一个全局布尔状态(drawingRect
),该状态指示当前是否按下了鼠标按钮。设置该状态并在事件发生时在列表末尾添加新矩形。在事件发生时保留该状态
布尔drawingRect=false;
void mousePressed(){
drawingRect=true;
颜色col=颜色(int(初始红色)、int(初始绿色)、int(初始蓝色));
添加(新矩形(mouseX、mouseY、minu SIZE、col));
}
void mouseereleased(){
drawingRect=false;
}
使用方法.Update()
,更改列表中最后一个矩形的位置和大小,只要状态drawingRect
指示按下鼠标按钮。
在循环中连续绘制所有te矩形:
void setup(){
大小(600600);
}
作废提款(){
if(drawingRect&&rectangles.size()>0){
Rectangle lastRect=rectangles.get(rectangles.size()-1);
更新(mouseX、mouseY、DIFF_SIZE);
}
背景(255);
对于(int i=0;i
你能提供一个可运行的示例吗?既然你说它正在消失,你很可能每次都画完整的画布(并且没有一个持久的副本),但我不能根据你发布的代码来确定它。@second“你能提供一个可运行的示例吗?”好主意,还有一个提示:[mre]
在注释中自动扩展到。