Манипулирование фигурами с помощью openFrameworks - PullRequest
1 голос
/ 25 февраля 2011

Я новичок в openFrameworks. Я учусь основам 2д рисования, и пока все отлично. Я нарисовал круг, используя:

ofSetColor(0x333333);
ofFill;
ofCircle(100,650,50);

У меня вопрос, как мне дать кругу имя переменной, чтобы я мог манипулировать с помощью метода мышью? Я пытался добавить имя перед ofCircle

theball.ofSetColor(0x333333);
theball.ofFill;
theball.ofCircle(100,650,50);

но get 'theball' не было объявлено в этой области видимости ошибки.

Ответы [ 2 ]

5 голосов
/ 10 октября 2011

Как заметил Разонг, это не то, как ОФ работает. OF (насколько мне известно) предоставляет удобную оболочку для многих вещей OpenGL. Таким образом, вы должны использовать вызовы OF для воздействия на текущий контекст рисования (в отличие от представления холста со спрайтовыми объектами или чем-то еще). Я обычно интегрирую такие вещи в свои объекты. Допустим, у вас есть такой класс ...

class TheBall {

protected:

    ofColor col;
    ofPoint pos;

public:

    // Pass a color and position when we create ball
    TheBall(ofColor ballColor, ofPoint ballPosition) {
        col = ballColor;
        pos = ballPosition;
    }

    // Destructor
    ~TheBall();

   // Make our ball move across the screen a little when we call update
   void update() { 
       pos.x++;
       pos.y++; 
   }

   // Draw stuff
   void draw(float alpha) {
       ofEnableAlphaBlending();     // We activate the OpenGL blending with the OF call
       ofFill();                    // 
       ofSetColor(col, alpha);      // Set color to the balls color field
       ofCircle(pos.x, pos.y, 5);   // Draw command
       ofDisableAlphaBlending();    // Disable the blending again
   }


};

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

testApp::setup() {

    ofColor color;
    ofPoint pos;

    color.set(255, 0, 255); // A bright gross purple
    pos.x, pos.y = 50;

    aBall = new TheBall(color, pos);

}

testApp::update() {
    aBall->update() 
}

testApp::draw() {
    float alpha = sin(ofGetElapsedTime())*255; // This will be a fun flashing effect
    aBall->draw(alpha)
}

Счастливого программирования. Удачного проектирования.

4 голосов
/ 01 марта 2011

Вы не можете сделать это таким образом. ofCircle - это метод глобального рисования, который рисует только круг.

Вы можете объявить переменную (или, лучше, три int для rgb - поскольку вы не можете использовать ofColor в качестве аргумента для ofSetColor), которые сохраняют цвет для круга и изменяют его в методе при нажатии мыши.

В методе рисования используйте переменные для ofSetColor перед рендерингом круга.

...