使用CCDirector的notificationNode来创建独立的
我们在游戏的制作中,肯定会设计到呈现给玩家的信息提示,比如获得了一个什么样的技能,获得了多少分数。这样的提示应该独立于游戏画面,即使在场景切换时信息提示也不应该受到影响。
cocos2d采用了便于理解的设计,每一个游戏的场景都是一个Scene,不同的场景切换也很方便,但任何时刻只能有一个scene运行,在场景切换的时候很难保留一个独立的层来显示提示信息。一开始我们使用了UIView,使用了非cocos2d的方式来实现,虽然达到了效果,但是总觉得在cocos2d里混入UIView不太舒服,于是查阅cocos2d的源代码,发现Director有一个notificationNode,独立于当前运行的scene。
CCDirector的drawScnene方法片段:
[runningScene_ visit];
[notificationNode_ visit];
现在我们可以创建一个CClayer,显示我们的提示信息,并赋给notificationNode
NotificationLayer *notificationLayer = [NotificationLayer node];
[[CCDirector sharedDirector] setNotificationNode:notificationLayer];
结果运行正常,该notificationLayer可以在scene切换时正常显示。但是我在NotificationLayer初始化的时候schedule了一个方法,用来显示一段时间后退出,这个动作并没有执行。
[self schedule:@selector(updatePosition:)];
调试发现,NotificationLayer由于没有加入到场景中,因此isRunning始终为NO。这样CCScheduler便无法执行updatePosition这个方法,因为它的isPause==YES。
不得已只好在发送setNotificationLayer消息时,向notifiationLayer发生onEnter消息,来模拟它进入场景。
[[[CCDirector sharedDirector] notificationNode] onEnter];
最后不要忘了显示结束后清理资源。

浙公网安备 33010602011771号