Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 绘制正方形时按键出现问题_Java_Processing - Fatal编程技术网

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]
在注释中自动扩展到。