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

 

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

 

 

转载于:https://www.cnblogs.com/pengyingh/articles/2437312.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值