我有一個struct「Layer」和class「LayerHandler」。圖層只包含紋理,精靈和兩個構造函數 - 一個是默認的,另一個是引用參數。 LayerHandler類是處理所有圖層的繪圖的類。我爲這個類添加圖層,稍後我使用win.draw(layerhandler_object)繪製所有內容。 LayerHandler從Drawable繼承,這樣做會覆蓋virtual void draw()。vector,sfml和「esp的值在函數調用中未正確保存」錯誤
LayerHandler.h:
#ifndef LAYERHANDLER_H
#define LAYERHANDLER_H
#include <vector>
#include <SFML\Graphics.hpp>
using namespace std;
using namespace sf;
struct Layer {
Texture tex;
Sprite spr;
Layer() { }
Layer(Layer& l) {
tex = l.tex;
spr = l.spr;
}
};
class LayerHandler : public Drawable {
private:
vector<Layer*> layers;
virtual void draw(RenderTarget& target, RenderStates states) const {
for (int i=0; i<layers.size(); i++)
target.draw(layers[i]->spr, states);
}
public:
LayerHandler();
~LayerHandler();
void Add(Layer& layer);
};
#endif
LayerHandler.cpp:
#include "LayerHandler.h"
LayerHandler::LayerHandler() {
}
LayerHandler::~LayerHandler() {
}
void LayerHandler::Add(Layer& layer) {
layers.push_back(new Layer(layer));
}
和main.cpp中:
#include <iostream>
#include <SFML\Graphics.hpp>
#include "LayerHandler.h"
using namespace std;
using namespace sf;
int main() {
RenderWindow win(VideoMode(800, 600), "Raven", Style::Default);
win.setFramerateLimit(60);
win.setVerticalSyncEnabled(true);
win.setMouseCursorVisible(false);
LayerHandler lhandler;
Layer back;
back.tex.loadFromFile("bao/gfx/back.png");
back.spr.setTexture(back.tex);
back.spr.setPosition(0, 50);
lhandler.Add(back);
Event evt;
float dt = 0.f;
Clock clock;
float dwticks = clock.getElapsedTime().asMilliseconds();
float dwnewticks = 0.f;
while (win.isOpen()) {
if (win.pollEvent(evt)) {
if (Keyboard::isKeyPressed(Keyboard::Key::Escape)) {
win.close();
}
} else {
dwnewticks = clock.getElapsedTime().asMilliseconds();
dt = dwnewticks > dwticks ? (dwnewticks - dwticks)/4000.f : 0.f;
dwticks = dwnewticks;
win.clear();
win.draw(lhandler);
win.display();
}
}
return 0;
}
我認爲這並不複雜,我做的一切都是好的,但我得到這個「ESP的價值沒有妥善保存在函數調用」錯誤。我不知道爲什麼我得到這個錯誤。我知道這可能是由不匹配的調用約定引起的,但我在代碼中看不到這樣的東西......我不得不說這是我第一次遇到這個錯誤,而且我完全不在的想法如何處理它。任何幫助?
有些東西可能不是你麻煩的原因,但仍然很重要:[不要同時使用'setFramerateLimit'和'setVerticalSyncEnabled'](http://www.sfml-dev.org/tutorials /2.3/window-window.php#controlling-the-framerate)&你的圖層拷貝應該a)以const ref爲參數,b)將'spr'的紋理設置爲'tex',而不是保留'l。 tex'。你也應該避免在頭文件中使用''語句並且使用'/'而不是非標準的'''作爲路徑。最後,使用智能指針或至少釋放你的記憶。 – Hiura
我剪出setFramerateLimit,只留下setVerticalSyncEnabled。我還將spr = l.spr更改爲spr.setTexture(tex),但我必須不同意我的副本應該將const ref作爲參數,因爲參考已經是一個常量指針。感謝您的幫助,我會嘗試釋放內存,並閱讀關於智能指針的信息。希望它會有所幫助。 – mentor93
***但我得到這個「ESP的價值沒有妥善保存在函數調用」錯誤。我不知道爲什麼我得到這個錯誤。堆棧腐敗。 – drescherjm