addObserver 应用详解
游戏结束场景分析
在游戏开发中,以打飞机游戏为例,游戏结束存在多种情况,常见的有三种:成功击败 boss、玩家主动选择退出游戏以及玩家操控的角色死亡。
代码实现步骤
1. 注册事件
在游戏开始时,我们需要注册一个事件。这一操作可以借助 NotificationCenter 类来完成。NotificationCenter 是一个单例类,它提供了消息通知机制,允许不同的对象之间进行解耦通信。
以下是注册事件的代码示例:
NotificationCenter::getInstance()->addObserver(
this,
callfuncO_selector(HelloWorld::ShowGameOver),
"ShowGameOver",
NULL
);
this:表示当前对象,即事件的观察者。callfuncO_selector(HelloWorld::ShowGameOver):这是一个选择器,用于指定当事件触发时要调用的方法,这里指定的是HelloWorld类中的ShowGameOver方法。"ShowGameOver":是事件的名称,用于唯一标识该事件。NULL:表示传递给事件处理方法的参数,这里为空。
2. 定义事件处理方法
接下来,我们需要定义 ShowGameOver 方法,该方法会在事件触发时被调用。在这个方法中,我们可以实现游戏结束时的具体逻辑,比如显示游戏结束界面。
void HelloWorld::ShowGameOver(Ref* pObj) {
auto gameoverlayer = GameOverLayer::create(score);
addChild(gameoverlayer, 10);
}
auto gameoverlayer = GameOverLayer::create(score):创建一个GameOverLayer类型的对象,该对象通常表示游戏结束界面,score可能是玩家的得分,用于在结束界面显示。addChild(gameoverlayer, 10):将游戏结束界面添加到当前场景中,10是该界面的显示层级。
3. 触发事件
当游戏结束事件发生时,我们可以通过 NotificationCenter 类的 postNotification 方法来触发之前注册的事件。
NotificationCenter::getInstance()->postNotification("ShowGameOver", NULL);
"ShowGameOver":要触发的事件名称,必须与注册时的事件名称一致。NULL:传递给事件处理方法的参数,这里为空。
一旦调用了 postNotification 方法,NotificationCenter 会查找所有注册了该事件的观察者,并调用它们对应的事件处理方法,从而使游戏进入结束操作。
通过以上步骤,我们可以利用 addObserver 方法实现游戏中不同模块之间的解耦通信,使得游戏结束逻辑的处理更加灵活和可维护。