2016-01-06 2 views
-1

, что действительно отстой ... Я знаю, как создавать классы, объекты, интерфейсы, циклы и т. Д. Но каждый раз, когда я пытаюсь сделать блок или более одного, который перемещается (когда я его выбираю) до точки, где я нажимаю, я получаю ошибки, ошибки и ошибки ... Почему, черт возьми, в этом нет учебника?Обработка/Как сделать выбираемый объект, который перемещается, когда я нажимаю

Мой новый класс выглядит так атм:

class Unit { 

    int X; 
    int Y; 
    int Breite; 
    int Laenge; 
    int ID; 
    boolean ausgewaelht = false; 

    Unit() { 
    } 

    Unit(int x, int y, int breite, int laenge) { 
    } 

    void create(UnitContent function) { 
     function.form(); 
    } 

    void move(float geschwindigkeit) { 
     if(isTriggerd(X,Y,Breite,Laenge) == true){ 
      X = X+(int)geschwindigkeit; 
      if(X > width) { 
       X = 0; 
      } 
     } 
    } 

    void setXandY(int x , int y) { 
     X = x; 
     Y = y; 
    } 

    void setBreiteandLaenge(int breite, int laenge) { 
     Breite = breite; 
     Laenge = laenge; 
    } 

    void setID(int id) { 
     ID = id; 
    } 

    int getX() { 
     return X; 
    } 

    int getY() { 
     return Y; 
    } 

    int getBreite() { 
     return Breite; 
    } 

    int getLaenge() { 
     return Laenge; 
    }  

    int getID() { 
     return ID; 
    } 

    boolean isTriggerd(int x, int y, int breite, int laenge) { 
     if(mouseX > x && mouseX < x+breite && mouseY > y && mouseY < y+laenge) { 
      return true; 
     } 
     else { 
      return false; 
     } 
    } 
} 

там что-то я забыл? И как мне отображать 10 или 50 единиц из них?

извините за мой плохой английский :) и ТНХ за помощь

+0

Условие 'if' от' isTriggerd (...) 'не похоже на право, вместо' x' не должно быть 'X', а вместо' mouseX' не должно быть 'x' , то же самое происходит для 'y' и' mouseY'. – Titus

+0

Хм просто попробовал, в коде ниже, правильно: я протестировал его, и когда я наводил курсор на прямоугольник, он двигается прямо, пока мой курсор больше не находится над объектом .... Но как отображать более одного раза из них ? : x – gnr

ответ

2

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

  • Сообщите нам, какие ошибки вы получаете.
  • Опубликовать MCVE с достаточным кодом, чтобы мы могли запускать его, но не код, напрямую не связанный с вашей проблемой.
  • Попробуйте разбить проблему на небольшие шаги и задайте только один конкретный вопрос одновременно.
  • Проверьте номер question checklist и убедитесь, что вы сделали все, что в списке.

Почему, черт возьми, в этом нет учебника?

Имейте в виду, что люди, отвечающие на вопросы о переполнении стека, делают это бесплатно, в свободное время. Люди, занимающиеся обработкой, делают это бесплатно, в свободное время. Тем не менее, есть тонны учебников по вашим проблемам. Вы пробовали искать в Google?

Here - это учебное пособие, которое делает именно то, что вы ищете. Эти примеры поставляются с редактором обработки (перейдите в Файл -> Примеры). The reference - еще один отличный ресурс, который вы должны проверить.

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

Шаг 0: Прервите свою проблему с меньших шагов. Это золотое правило программирования. Всякий раз, когда вы застреваете, вернитесь к этому шагу. Этот шаг подпитывает остальные шаги, и это должно быть первое, второе и третье, что вы делаете всякий раз, когда вы застреваете.

Этап 1: Вы можете нарисовать один объект? Не беспокойтесь о взаимодействии или нескольких объектах или чем-либо еще, просто нарисуйте один объект. Сначала запустите этот код.

Вот код, который рисует один круг:

void setup(){ 
    size(500, 500); 
    ellipseMode(CENTER); 
} 

void draw(){ 
background(0); 
ellipse(100, 200, 50, 50); 
} 

Шаг 2: Вы можете инкапсулировать информацию, необходимую для отрисовки объекта в классе? Опять же, только беспокоиться о следующем небольшом шаге - не беспокойтесь о нескольких фигурах. Просто получите класс, работающий для одного объекта. Вот как мы можем инкапсулировать данные для нашего круга:

Circle circle; 

void setup() { 
    size(500, 500); 
    ellipseMode(CENTER); 
    circle = new Circle(100, 200, 50); 
} 

void draw() { 
    background(0); 

    circle.draw(); 
} 

class Circle { 
    float x; 
    float y; 
    float r; 

    public Circle(float x, float y, float r) { 
    this.x = x; 
    this.y = y; 
    this.r = r; 
    } 

    void draw() { 
    ellipse(x, y, r, r); 
    } 
} 

Если у вас возникли проблемы на этом этапе, то вы можете оставить что-то вроде этого небольшого примера, с более конкретным вопросом, и это будет намного легче поможет вам, если вы разместите раздел всего своего эскиза без каких-либо конкретных ошибок.

Шаг 3: Вы можете добавить простую логику взаимодействия пользователя к классу круга? Не беспокойтесь о нажатии, просто попробуйте изменить цвет круга, когда вы наводите на него курсор.

Circle circle; 

void setup() { 
    size(500, 500); 
    ellipseMode(RADIUS); 
    circle = new Circle(100, 200, 50); 
} 

void draw() { 
    background(0); 

    circle.draw(); 
} 

class Circle { 
    float x; 
    float y; 
    float r; 

    public Circle(float x, float y, float r) { 
    this.x = x; 
    this.y = y; 
    this.r = r; 
    } 

    void draw() { 

    if(dist(mouseX, mouseY, x, y) < r){ 
     //mouse is inside circle 
     fill(0, 255, 0); 
    } 
    else{ 
     //mouse is outside circle 
     fill(0, 0, 255); 
    } 

    ellipse(x, y, r, r); 
    } 
} 

Разбив вашу большую проблему вниз в этих небольших шагов, она становится гораздо проще отлаживать код, чем если вы попытаетесь записать весь свой эскиз в одно время.

Этап 4: Можете ли вы улучшить код взаимодействия, чтобы обнаружить щелчок? Можете ли вы переместить круг при обнаружении перетаскивания?

Вы должны, вероятно, разорвать эти шаги вниз еще дальше, но ради сохранения этого поста короткий (ER), я объединил их в одно:

Circle circle; 

void setup() { 
    size(500, 500); 
    ellipseMode(RADIUS); 
    circle = new Circle(100, 200, 50); 
} 

void draw() { 
    background(0); 

    circle.draw(); 
} 

class Circle { 
    float x; 
    float y; 
    float r; 

    public Circle(float x, float y, float r) { 
    this.x = x; 
    this.y = y; 
    this.r = r; 
    } 

    void draw() { 

    if(dist(mouseX, mouseY, x, y) < r){ 
     //mouse is inside circle 

     if(mousePressed){ 
     //mouse is being dragged 
     fill(255, 0, 0); 

     //move the circle to the mouse position 
     x = mouseX; 
     y = mouseY; 
     } 
     else{ 
     //mouse is not clicked 
     fill(0, 255, 0); 
     } 


    } 
    else{ 
     //mouse is outside circle 
     fill(0, 0, 255); 
    } 

    ellipse(x, y, r, r); 
    } 
} 

Шаг 5: Вы можете сделать это работать для нескольких объектов? Если вы хорошо поработали над тем, чтобы разбить проблему на небольшие шаги и инкапсулировать свою логику в класс, то этот шаг станет довольно простым.

ArrayList<Circle> circles = new ArrayList<Circle>(); 

void setup() { 
    size(500, 500); 
    ellipseMode(RADIUS); 

    for (int i = 0; i < 10; i++) { 
    circles.add(new Circle(random(width), random(height), random(10, 50))); 
    } 
} 

void draw() { 
    background(0); 

    for (Circle circle : circles) { 
    circle.draw(); 
    } 
} 

class Circle { 
    float x; 
    float y; 
    float r; 

    public Circle(float x, float y, float r) { 
    this.x = x; 
    this.y = y; 
    this.r = r; 
    } 

    void draw() { 

    if (dist(mouseX, mouseY, x, y) < r) { 
     //mouse is inside circle 

     if (mousePressed) { 
     //mouse is being dragged 
     fill(255, 0, 0); 

     //move the circle to the mouse position 
     x = mouseX; 
     y = mouseY; 
     } else { 
     //mouse is not clicked 
     fill(0, 255, 0); 
     } 
    } else { 
     //mouse is outside circle 
     fill(0, 0, 255); 
    } 

    ellipse(x, y, r, r); 
    } 
} 

Подводя итог, необходимо разбить проблему на более мелкие шаги и взять на себя те шаги, по одному за раз. Если вы застряли на определенном шаге (или если вы не понимаете один из шагов моего ответа), вы можете разместить небольшой пример MCVE, как и мои примеры выше, и задать конкретный вопрос.

Счастливое кодирование!

+0

Хорошо им жаль мое смутное объяснение, но я не могу хорошо говорить по-английски:/Но в следующий раз плохо уважаю все это :) спасибо, что ваш ответ помог alot ^^ – gnr

-1

Это действительно не выглядеть у вас есть какие-либо графический код для некоторых координат кроме. Чтобы отобразить что-то на Java, вы должны использовать библиотеку, которая поддерживает ее как Swing или JavaFX. Here's Вопрос, который даст вам некоторое представление о различиях. Счастливое кодирование!

+0

ok thx dude плохо смотрю на это :) Но не могли бы вы просто сказать мне, мне нужен цикл for, чтобы отображать много единиц один раз? – gnr

+0

И знаете ли вы, как сделать выбранный объект в обработке? ^^ – gnr

+0

Боюсь, что нет, но на сайте фреймворка есть [справочный раздел] (https://processing.org/reference/). – drognisep

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