我有一個sfml窗口容器,它似乎工作,但glViewPorts是錯誤的大小,我認爲是因爲錯誤的sf :: Window正在傳遞。回調函數混淆了參數?
這是一個添加到窗口的函數:它需要關於sfml窗口的一些信息。
int WindowContainer::PushBack(WindowData& data)
{
if(data.WindowSettingsOK() && data.VideoModeOK()){
mWindowVector.resize(mWindowVector.size() + 1);
mDisplayFuncVector.resize(mWindowVector.size());
mInputFuncVector.resize(mWindowVector.size());
mWindowVector.at(mWindowVector.size() - 1) = new sf::Window();
mWindowVector.at(mWindowVector.size() - 1)->Create(data.VideoMode(), data.Title(), data.Style(), data.Settings());
mWindowVector.at(mWindowVector.size() - 1)->SetPosition(data.PositionX(), data.PositionY());
mDisplayFuncVector.at(mWindowVector.size() - 1) = nullptr;
mInputFuncVector.at(mWindowVector.size() - 1) = nullptr;
return 0;
}
else{
PrintError(ErrorMessageType::BadSettings);
return 1;
}
}
或者,該函數可被調用來設置顯示和輸入功能回調:
int WindowContainer::PushBack(WindowData& data, function_p displayFunc, function_p inputFunc)
{
int return_val = PushBack(data);
mDisplayFuncVector.at(mWindowVector.size() - 1) = displayFunc;
mInputFuncVector.at(mWindowVector.size() - 1) = inputFunc;
return return_val;
}
然後,當窗口需要.Display()
「ING,調用此函數:
void WindowContainer::ProcessDisplay()
{
for(unsigned int i = 0; i < mWindowVector.size(); i ++){
if(mDisplayFuncVector.at(i) != nullptr){
mDisplayFuncVector.at(i)(*mWindowVector.at(i), mClock, (const void*&)mExternalDrawingDataPointer);
}
mWindowVector.at(i)->Display();
}
}
...這一切都很好,直到屏幕上的結果是調整一個窗口的大小會影響兩個窗口的視口。這表明調用回調函數:mDisplayFuncVector.at(i)(*mWindowVector.at(i), mClock, (const void*&)mExternalDrawingDataPointer);
每次給出參數*mWindowVector.at(0)
,而不是單獨的每個窗口。 (如在*mWindowVector.at(i)
)
任何人都可以幫助解決這個問題嗎?
主循環包含此代碼:
while(container.Access(0)->IsOpened()){
container.ProcessInput();
container.ProcessDisplay();
}
Container.Access(int)
是這樣的功能:
const sf::Window*& WindowContainer::Access(unsigned int index)
{
if(index > mWindowVector.size()){
PrintError(ErrorMessageType::IndexOutOfRange);
}
else{
return (const sf::Window*&)mWindowVector.at(index);
}
return (const sf::Window*&)mWindowVector.at(0);
}
再次感謝,我敢肯定,我犯了一個錯誤的地方,但不能發現它。
什麼是你的顯示功能的原型? – molbdnilo 2013-02-10 14:10:17
main.cpp裏面我有這個功能: 'void display(sf :: Window&window,const sf :: Clock&clock,const void *&data);' 這就是你要求的嗎? – user3728501 2013-02-10 14:11:00