Fork me on GitHub

使用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];

 

最后不要忘了显示结束后清理资源。

 

 

posted on 2012-04-08 09:31  pengyingh  阅读(929)  评论(0)    收藏  举报

导航