2016-04-13 1 views
0

В настоящее время я использую Обработку java, и я делаю drawpad. Я сделал все цвета и чертежи, однако теперь я хочу, чтобы пользователь мог создать квадрат и перетащить мышь, чтобы он был определенного размера. Как в приложении для рисования на любом компьютере.Создание drawpad в обработке Java, изо всех сил пытаюсь создать квадрат

Пока ive попробовал несколько способов, подумайте, что их просто нужно немного подкрутить, и я не могу заставить его работать! Я столкнулся с двумя способами, которые, по моему мнению, являются самыми близкими! Если кто-то может дать мне подсказку или помощь, которая будет оценена! Спасибо :)

public void setup() 
{ 
    size(1900,1000); 
    smooth(); 
    background(255); 

} 

int posX, posY, pos2X, pos2Y; 

void draw() 
{ 
} 

void mousePressed() 
{ 

    posX = mouseX; 
    posY = mouseY; 


} 
void mouseReleased() 
{ 
    pos2X = mouseX; 
    pos2Y =mouseY; 

    rect(posX,posY, pos2X , pos2Y); 
} 

или

 public void setup() 
    { 
    size(1900,1000); 
    smooth(); 
    background(255); 


} 

int posX, posY, pos2X, pos2Y; 

void draw() { 
} 

    void mousePressed() 
    { 
if(mousePressed == true) 
{ 
    posX = mouseX; 
    posY = mouseY; 
} 
if(mousePressed == false) 
{ 
    pos2X = mouseX; 
    pos2Y =mouseY; 
} 

rect(posX,posY, pos2X , pos2Y); 
} 
+0

Вы вряд ли сможете это сделать, обернув это в объекты. Прокомментируйте, если вам нужна помощь в этом. Должно быть не слишком сложно. – Jankapunkt

ответ

1

Хорошо, я попробовал его и придумал следующее: Сначала создадим простой класс, который представляет ваш квадрат.

class Square 
{ 
    float x, y, x2, y2; 
    color col; 
    public Square(float initPosX, float initPosY, color col) { 
     this.x = initPosX; 
     this.y = initPosY; 
     this.col = col; 
    } 

    public void updateSize(float endx, float endy) { 
     x2 = endx; 
     y2 = endy; 
    } 

    public Square copy() { 
     Square s = new Square(x,y,col); 
     s.updateSize(x2,y2); 
     return s; 
    } 

    public void display() { 
     pushMatrix(); 
     translate(x,y); 
     fill(col); 
     rect(0,0,x2-x,y2-y); 
     popMatrix();  
    } 
} 

У этого есть четыре очка и цвет. При создании вы позже передадите ему положение мыши (x и y) и цвет.

Вы хотите, чтобы квадрат был гибким, если вы держите мышь в нажатом положении. Вот почему у вас есть метод updateSize в классе Square, где вы передаете текущую позицию мыши.

Как только вы отпустите мышь, квадрат больше не может быть изменен. Но его все равно нужно рисовать, поэтому вам нужна коллекция для хранения ваших квадратов.

Поэтому вы ввести две переменные - текущий квадрат (тот, который вы не изменить размер до mouseReleased) и коллекцию для хранения результата:

Square currentSqare; 
ArrayList<Square> squares; 

Теперь вам нужно настроить свой эскиз:

void setup() { // this is run once. 

    // set the background color 
    background(255); 

    // canvas size (Integers only, please.) 
    size(600, 600); 

    // smooth edges 
    smooth(); 

    // limit the number of frames per second 
    frameRate(30); 

    // initialize collection 

    squares = new ArrayList<Square>(); 
} 

После этого вам понадобится механизм для добавления нового квадрата на mousePressed и сохраните его в коллекции, как только мышь была освобождена:

void mousePressed() { 
    currentSqare = new Square(mouseX, mouseY,color(random(0,200),150,random(0,200))); 
} 

void mouseReleased() { 
    squares.add(currentSqare.copy()); 
    currentSqare = null; 
} 

Обратите внимание, что мы храним копию квадрата, а не ссылку, через копию (которая является частью нашего квадратного класса).

Наконец, мы должны сделать все квадраты:

void draw() { // this is run repeatedly. 
    background(255); 

    //draw all stored squares first 
    for(Square sq : squares) 
     sq.display(); 

    //if we pressed the mouse 
    //and added a new square 
    if (currentSqare != null) { 
     currentSqare.updateSize(mouseX, mouseY); 
     currentSqare.display(); 
    } 
} 

Что вы можете сделать здесь, чтобы добавить классы для других примитивов, как круги, треугольники или даже расширить площадь для «специальных» Квадраты. Надеюсь, что эта проблема хорошо решена.

Смежные вопросы