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;
}
}
대안 적으로,이 기능 설정을 호출 할 수있는 디스플레이 및 입력 기능 콜백 : 윈도우 .Display()
가 '보내고해야하는 경우,이 함수가 호출되고 나서
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;
}
:
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)
에서와 같이)
누구든지이 문제를 해결할 수 있습니까?
주요 루프는이 코드를 포함
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);
}
다시 한번 감사, 내가 어딘가에서 실수를했지만 그것을 발견 할 수없는 확신 :
while(container.Access(0)->IsOpened()){
container.ProcessInput();
container.ProcessDisplay();
}
Container.Access(int)
이 기능입니다.
디스플레이 기능의 프로토 타입은 무엇입니까? ;' 당신이 무엇을 요구했다인가요 '무효 디스플레이 (SF : 창 및 창, CONST 김포 :: 시계 및 시계, const를 무효 * 데이터) : MAIN.CPP 내부 – molbdnilo
나는이 기능이? – user3728501