addObserver 应用详解

2015年03月22日 12:02 0 点赞 0 评论 更新于 2025-11-21 18:03

游戏结束场景分析

在游戏开发中,以打飞机游戏为例,游戏结束存在多种情况,常见的有三种:成功击败 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 方法实现游戏中不同模块之间的解耦通信,使得游戏结束逻辑的处理更加灵活和可维护。

作者信息

menghao

menghao

共发布了 3994 篇文章