Извините за довольно расплывчатое название, но оно казалось подходящим для столь же расплывчатого вопроса, хотя, надеюсь, достаточно кратким, чтобы кто-нибудь смог ответить на него. Я потратил приличное количество времени, работая над фреймворком для 2D-игры с боковой прокруткой в SDL, и теперь, когда я освоился с библиотекой и у меня есть рабочий прототип, я хочу интегрировать физическую библиотеку Box2D в свою игру , Теперь я не просто сначала погрузился в голову, но и потратил время на то, чтобы скомпилировать библиотеку в моей системе (очевидно), изучить приложение Testbed, создать несколько собственных, чтобы освоить все это. И все же я все еще не могу понять, как именно интегрировать его в мою существующую игровую структуру. Ниже приведен пример моего источника для игрового «движка», если я могу быть настолько смелым:
CMain.cpp
// Constructor. Initialize the screen display surface and
// let the application know that we are running.
CMain::CMain(){
displaySurface = NULL;
isRunning = true;
}
// Init function, hooks SDL libraries, configures the display
// surface, window and all pre-runtime environment parts.
int CMain::OnExecute(){
if(OnInit() == false){
return -1;
}
// Event checking, game loop and render loop.
SDL_Event Event;
while(isRunning){
while(SDL_PollEvent(&Event)){
OnEvent(&Event);
}
OnLoop();
OnRender();
}
// Cleanup, called when the application is no longer running,
// handles the removal of all loaded resources from memory.
OnCleanup();
return 0;
}
int main(int argc, char* argv[]){
CMain digIt;
return digIt.OnExecute();
}
Как вы видите, это заботится о важнейших функциях игрового цикла. Я не думал, что полный код различных вспомогательных функций необходим для контекста вопроса, но если это будет полезно, просто скажите это, и я был бы рад опубликовать его. Итак, мой вопрос таков:
Зная о структуре мира Box2D и о том, как он инициализируется, шагает и все такое, как мне теперь интегрировать это в существующую игровую структуру? Хочу ли я, чтобы весь мой класс CMain унаследовал от b2World? (то есть класс CMain: b2World {}), есть ли какой-то другой способ создать мир, чтобы он был глобально доступен, не совершая кардинальный грех хорошей практики кодирования? Например, я попытался объявить указатель b2World * в заголовке CMain, а затем передать его последующим функциям, чтобы сделать с ними то, что они должны были сделать, но это привело к большому количеству исключений нулевого указателя. Любой совет, который вы могли бы дать, или пример кода, если это вообще возможно, будет невероятно оценен!