У меня есть 2 экземпляра пользовательского класса ArtWork в векторе. Для каждого экземпляра я рисую свойство «имя» на экране.
Эти две строки выровнены вдоль оси Y, как:
Art00 Art01
Теперь, если я использую std: swap для изменения z-порядка, «Art00» больше не отрисовывается, и результат
Art01
Я не могу понять, где проблема. Вот очень простой код:
// File ArtWork.cpp
#pragma once
#include <stdio.h>
#include <iostream>
#include "ofPoint.h"#include "ofxAssets.h"using namespace std;
class ArtWork {
public:
ArtWork();
void setup(string _name, ofVec2f _position);
void draw();
private:
string name;
ofTrueTypeFont font;
ofVec2f position;
};
// File ArtWork.cpp
#include "ArtWork.h"
ArtWork::ArtWork() {
}
void ArtWork::setup(std::string _name, ofVec2f _position) {
name = _name;
position = _position;
font.load("verdana.ttf", 14, true, true);
font.setLineHeight(18.0f);
font.setLetterSpacing(1.037);
}
void ArtWork::draw() {
font.drawString(name, position.x, position.y);
}
// ofApp.cpp
#include "ofApp.h"#include "ArtWork.h"
vector<ArtWork> artWorks;
void ofApp::setup(){
ofBackground(22);
ArtWork artWork0 = ArtWork();
artWork0.setup("Art00",ofVec2f(10,30));
ArtWork artWork1 = ArtWork();
artWork1.setup("Art01",ofVec2f(100,30));
artWorks.push_back(artWork0);
artWorks.push_back(artWork1);
// Changes z-order
// std::swap(artWorks[0], artWorks[1]); // uncomment, and Art00 is not drawn anymore
}
void ofApp::draw(){
ofSetColor(200);
for(int i = 0; i < artWorks.size(); i++) {
artWorks[i].draw();
}
}
Если я заменю:
font.drawString(name, position.x, position.y);
с
ofDrawBitmapString(name, position.x, position.y);
все работает правильно и «Арт00» & «Арт01» нарисованы.
Я также определил шрифт как глобальную переменную и передал его указатель экземпляру ArtWork, чтобы иметь только один экземпляр font
, но «Art00» не нарисован. Я не могу понять, где проблема.
Задача ещё не решена.
Других решений пока нет …