openframeworks - вектор std: swap имеет странный побочный эффект при рисовании строки - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть 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);

все работает правильно, и "Art00" и "Art01" нарисованы.

Я также определил шрифт как глобальную переменную и передал его указатель на экземпляр ArtWork, чтобы иметь только один экземпляр font, но «Art00» не рисуется. Я не могу понять, где проблема.

...