1

私はopenFrameworksの初心者です。私はこれまでのところすべて素晴らしい基本的な2D描画を学んでいます。私は以下を使用して円を描きました:

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

私の質問は、マウスプレスされたメソッドで操作できるように、円に変数名を付けるにはどうすればよいですか?ofCircleの前に名前を付けてみました

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

しかし、getI'theball'はこのスコープエラーで宣言されていません。

4

2 に答える 2

5

razong が指摘したように、それは OF の仕組みではありません。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)
}

楽しいプログラミング。楽しいデザイン。

于 2011-10-10T12:36:34.103 に答える
4

そんなことはできません。ofCircle はグローバルな描画方法であり、円だけを描画します。

円の色を格納する変数 (または rgb の場合は 3 つの int - ofSetColor の引数として ofColor を使用できないため) を宣言し、それを mousepressed メソッドで変更できます。

draw メソッド内で、円をレンダリングする前に ofSetColor の変数を使用します。

于 2011-03-01T12:27:35.133 に答える