C++中实现替换游戏场景
Implementation of the replacing game scene in C++
我的C++游戏中大约有 10 个场景类。它类似于常规游戏屏幕(菜单屏幕、游戏屏幕、排行榜、选项等)。所以我需要一些技巧来将一个场景替换为另一个场景。我已经阅读了您在此线程中发布给我的所有评论并尝试实施它。现在我有以下代码:
// -----[ main.cpp ]----- //
#include "SceneManager.h"
#include "Scene.h"
int main( int argc, const char * argv[] ) {
SceneManager *sceneManager = new SceneManager();
sceneManager->changeScene( 0 );
delete sceneManager;
return 0;
}
// -----[ Scene.h ]----- //
class SceneManager;
class Scene {
public:
SceneManager *sceneManager;
void start( SceneManager *sceneManager );
};
// -----[ SceneManager.h ]----- //
#include "Scene.h"
#include "MenuScene.h"
#include "GameScene.h"
class Scene;
class MenuScene;
class GameScene;
class SceneManager {
public:
Scene* scene;
void changeScene( short id ) {
if ( scene != NULL ) {
delete scene; // to prevent a memory leak
}
if ( id == 0 ) {
scene = new MenuScene();
} else if ( id == 1 ) {
scene = new GameScene();
}
if (scene) {
scene->start( this );
}
}
};
// -----[ MenuScene.h ]----- //
class MenuScene: public Scene {
public:
void start( SceneManager *sceneManager ) {
this->sceneManager = sceneManager;
}
};
// -----[ GameScene.h ]----- //
class GameScene: public Scene {
public:
void start( SceneManager *sceneManager ) {
this->sceneManager = sceneManager;
}
};
由于错误(XCode 4.6,MacOS X),它不起作用:
Apple Match-O Linker (id) Error
Undefined symbols for architecture x86_64:
"Scene::start(SceneManager*)", referenced from:
SceneManager::changeScene(short) in main.o
ld: symbol(s) not found for architecture x86_64
我做错了什么?如何解决?也许有人知道关于这个主题的一些流行问题?
正如评论中提到的,我相信你的设计在概念上需要另一个类。这是一个粗略的例子。
class Scene {
public:
virtual void start() = 0;
};
class SceneManager {
public:
void changeScene( short id ) {
Scene* scene = NULL;
if ( id == 0 ) {
scene = new MenuScene(); // undeclared yet
} else if ( id == 1 ) {
scene = new GameScene(); // undeclared yet
}
if (scene) {
// TODO: make the scene visible.
scene->start();
}
}
};
class MenuScene: public Scene {
public:
virtual void start() {
// Draw menu stuff
}
};
class GameScene: public Scene {
public:
void start() {
// Draw game stuff
}
};
如果不了解有关特定环境的更多上下文,就很难比这更具体。
相关文章:
- 模板参数替换失败,并且未完成隐式转换
- 如何用转义符替换字符串中的所有特殊字符
- 在C++游戏中与库存系统作斗争
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- 换位表导致测试失败(但在游戏中运行良好)
- 在一个读写器队列中,我可以用volatile替换原子吗
- 用符号版本替换对函数的所有调用
- Craps游戏问题,忽略if语句
- 如何通过替换顺序代码的while循环来添加OpenMP for循环
- 替换基于地图的所有引用
- 按平均值替换数组中的元素
- 矢量下标超出SFML游戏中的范围
- 我是 c++ 的新手.学习基本知识后,我想做井字游戏.对于印刷板,我在下面写代码,但它显示错误
- 我可以在这里替换什么,因为我不能在 C# 中使用隐式变量的 lambda 函数?
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 我在贪吃蛇游戏中收到了错误代码 -1073741571
- 在C++中,我的主机游戏角色在游戏场数组内移动时不会停止
- 带有二进制文件的游戏场
- C++中实现替换游戏场景
- 我的21场骰子游戏的C++错误,请帮忙