openframeworks — вектор std: swap имеет странный побочный эффект при рисовании строки

У меня есть 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» не нарисован. Я не могу понять, где проблема.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector