ofEvents() 이벤트 우선순위


별도의 클래스에 ofApp.cpp 와 같은 이벤트를 만들어 수신 할 수 있는데, 이때, 이벤트 수신의 순위를 지정 할 수 있다.









 

ofApp.cpp

#include "ofApp.h"
#include "SomeObject.h"

//--------------------------------------------------------------
void ofApp::setup(){

    /*
    본문의 Draw 이벤트는 우선순위가(Event priority value) 100 이고, 
    이것을 기준으로 이벤트 우선순위를 정하는데, 값이 높을 수록 최상단에 위치함.
    값이 동격일 경우 생성 순서에 의하여 결정됨.
    */
    DrawObject* so1 = new DrawObject(ofVec2f(150, 100), ofColor::skyBlue, 101); // 본문 보다 앞에 있음
    DrawObject* so2 = new DrawObject(ofVec2f(125, 50), ofColor::brown , 99); // 본문 보다 뒤에 있음.
}

//--------------------------------------------------------------
void ofApp::draw() {

    ofSetColor(ofColor::red);
    ofDrawCircle(100, 100, 50);
    ofSetColor(ofColor::white);
}




DrawObject.h

#pragma once

#include "ofMain.h"
#include "ofEvents.h"

class DrawObject 
{
private:
    ofVec2f pos;
    ofColor color;
    int prio;
public :

    DrawObject(ofVec2f pos , ofColor color , int prio)
    {
        this->pos = pos;
        this->color = color;
        this->prio = prio;
        
        //ofEvents 에서는 우선순위를 쉽게 지정 할 수 있도록 아래의 값을 만들어 놨다.
        //OF_EVENT_ORDER_BEFORE_APP = 0;
        //OF_EVENT_ORDER_AFTER_APP = 200;
        //OF_EVENT_ORDER_APP = 100;


        //객체에 이벤트를 별도로 수신 하도록 하여 독립적인 draw 이벤트를 만들었다.
        ofAddListener(ofEvents().draw, this, &DrawObject::draw, prio);
    }

    void draw(ofEventArgs &e)
    {
        ofSetColor(color);
        ofDrawCircle(pos.x, pos.y, 50);
    }
    
};




Yamecoder 야매코더_
C++(oF) 2016. 1. 13. 21:36

댓글을 달아 주세요

Powerd by Tistory, designed by criuce
rss