【问题标题】:Problems with drawing program in processing绘图程序在处理中的问题
【发布时间】:2016-09-27 01:54:28
【问题描述】:

我正在用 Java 处理创建一个基本的绘图程序,我有两种颜色(以及一个橡皮擦),我刚刚创建了一种新颜色(绿色)。出于某种原因,当我单击绿色时,它不会改变颜色。谢谢!

(注意,我在 Eclipse 中运行这个程序并导入了处理,如果你打算只使用处理,请将 int 颜色更改为 color1。去掉主函数,即 PApplet.main("main") ;,你应该很好)如果你不想在 Eclipse 中运行它(就像我一样),这里有一篇文章:https://processing.org/tutorials/eclipse/

// note: many imports aren't used yet
import java.util.ArrayList;
import java.util.Scanner;
import processing.core.PApplet;
import processing.core.PShape;

import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class Main extends PApplet{

PShape rectangle;

String file = "";

char letter;

int color;
int color2;
int color3;
boolean red = false;
boolean blue = false;
boolean green = false;
boolean yellow = false;
boolean eraser = false;

boolean saving = false;

// needed to create this in order for Eclipse to work
public static void main(String[] args) {
    PApplet.main("Main");
}

public void settings(){
    size(1280, 720);
}

public void setup() {
    size(1280, 720);
    smooth();
    background(255, 255, 255);
    noStroke();

}

public void draw() {

    if (keyPressed) {

        if (key == 'c') {
            background(255, 255, 255);
        }

        if (key == 's') {
            save("Drawing.tif");

        }

    }
    else {
        color = 0;
    }
    fill(0);
    text("Press 'c' to clear the screen", 50, 700, 200, 50);
    text("Press 's' to save", 250, 700, 200, 50);

    fill(255, 0, 0);
    // red square
    rect(0, 50, 50, 50);
    fill(0, 10, 255);
    // blue square
    rect(0, 100, 50, 50);
    fill(0, 255, 40);
    // green square
    rect(0, 150, 50, 50);
    fill(255, 255, 0);
    // yellow square
    rect(0, 200, 50, 50);
    fill(0);


}

public void mousePressed() {
    if(red) {
        color = 255;
        color2 = 0;
        color3 = 0;
    }
    if(eraser) {
        color = 255;
        color2 = 255;
        color3 = 255;
    }
    if(blue) {
        color = 0;
        color2 = 10;
        color3 = 255;
    }
    if(green){
        color = 0;
        color2 = 255;
        color3 = 40;
    }
    else{
        fill(0);
    }
    // check if mouse is in drawing area
    if (mouseX >= 50 && mouseX <= 1280 && mouseY >= 0 && mouseY <= 680) {
        // change the drawing color 
        fill(color, color2, color3);
        rect(mouseX, mouseY, 50, 50);
    }
    // if red
    if (mouseX >= 0 && mouseX <= 50 && mouseY >= 50 && mouseY <= 100) {
        eraser = false;
        blue = false;
        green = false;
        red = true;
    }
    // if eraser (note: in top left corner)
    if (mouseX >= 0 && mouseX <= 50 && mouseY >= 0 && mouseY <= 50) {
        red = false;
        blue = false;
        green = false;
        eraser = true;
    }
    // if blue
    if (mouseX >= 0 && mouseX <=50 && mouseY >= 100 && mouseY <= 150) {
        eraser = false;
        red = false;
        green = false;
        blue = true;
    }
    // if green
    if (mouseX >= 0 && mouseY <= 50 && mouseY >= 150 && mouseY <= 200) {
        eraser = false;
        red = false;
        blue = false;
        green = true;
    }
}

// basically the same code for mousePressed
public void mouseDragged() {
    if(red) {
        color = 255;
        color2 = 0;
        color3 = 0;
    }
    if(eraser) {
        color = 255;
        color2 = 255;
        color3 = 255;
    }
    if(blue) {
        color = 0;
        color2 = 10;
        color3 = 255;
    }
    if(green){
        color = 0;
        color2 = 255;
        color3 = 40;
    }
    else{
        fill(0);
    }
    // check if mouse is in drawing area
    if (mouseX >= 50 && mouseX <= 1280 && mouseY >= 0 && mouseY <= 680) {
        // change the drawing color 
        fill(color, color2, color3);
        rect(mouseX, mouseY, 50, 50);
    }
    // if red
    if (mouseX >= 0 && mouseX <= 50 && mouseY >= 50 && mouseY <= 100) {
        eraser = false;
        blue = false;
        green = false;
        red = true;
    }
    // if eraser (note: in top left corner)
    if (mouseX >= 0 && mouseX <= 50 && mouseY >= 0 && mouseY <= 50) {
        red = false;
        blue = false;
        green = false;
        eraser = true;
    }
    // if blue
    if (mouseX >= 0 && mouseX <=50 && mouseY >= 100 && mouseY <= 150) {
        eraser = false;
        red = false;
        green = false;
        blue = true;
    }
    // if green
    if (mouseX >= 0 && mouseY <= 50 && mouseY >= 150 && mouseY <= 200) {
        eraser = false;
        red = false;
        blue = false;
        green = true;
    }
}

}

【问题讨论】:

  • Java 标记已移除:这是一个处理问题,而不是 Java 问题。是的,这些语言是相关的,但它们并不相同。

标签: eclipse processing


【解决方案1】:

就像我在your previous question 中所说,您真的不应该使用名为color 的变量。它可能在 Eclipse 中对你有用,但它令人困惑。至少这让我们更难帮助您。当您使用它时,您应该注意诸如未使用的导入语句之类的事情。另见:How to create a Minimal, Complete, and Verifiable example

要找出此类问题,您必须进行一些调试。我要检查的第一件事是:代码是否曾在mousePressed() 函数中输入您的绿色if 语句?所以我会在if 语句中添加一个println() 语句,如下所示:

  if (mouseX >= 0 && mouseY <= 50 && mouseY >= 150 && mouseY <= 200) {
    println("here");
    eraser = false;
    red = false;
    blue = false;
    green = true;
  }

运行程序并单击绿色方块,我们看到这个if 语句从未被输入。这绝对是可疑的,所以让我们仔细看看if 声明本身:

  if (mouseX >= 0 && mouseY <= 50 && mouseY >= 150 && mouseY <= 200) {

注意到什么了吗?如果您不这样做,请大声朗读。

第二个检查是比较mouseY。看起来你打算使用mouseX

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    相关资源
    最近更新 更多